Browsed by
月份:2013年1月

Starling中文站翻译第三季

Starling中文站翻译第三季

目前Starling中文站翻译第三季火热进行中,有能力有时间的你,不妨也去为社区做点贡献。

作者一直对英语有阴影,上学时英语好烂,无奈搞了IT这一行,英语也要过关,国内和国外的技术还是有很大差距。多年来一直坚持着记单词,至少先能看懂文档再说,有道单词本记得满满的,^_^!

如今看到 Starling中文站在认领翻译,斗胆也去认领了几篇,好在翻译后也会有管理员审核修改,不至于太误导别人。接了翻译后,这几天也是各种有道,谷歌,偶尔问下别人,总算把自己认领的几篇翻译完了。提交了以后,管理员一看,还有几篇没人认领,故而又翻译了一篇,也越来越顺手了,嘿嘿。颇感欣慰!

以下是作者认领的几篇,如果你发现有错误,可以直接联系我,以进行修改。

1、List of Feathers Features

2、PickerList

3、ProgressBar

4、FlashDevelop

Starling中文站后面还会引入其他的相关翻译,有志之士,积极参与。

人人为我,我为人人!

starling翻译

关于单例模式的写法和理解

关于单例模式的写法和理解

网上或者在群里看到的单例写法蛮多,我也随便写点,也好给别人点参考。

目前作者常用的单例写法:

[codesyntax lang=”actionscript3″]

package
{
	public class Test
	{
		private static var instance:Test=null;
		public function Test(p:Param)
		{
		}
		public static function getInstance():Test{
			return instance||=new Test(new Param());
		}
	}
}
class Param{}

[/codesyntax]

“||=”如果你觉得不好用,或者有问题的话,也可以换成常规的if判断。

作者使用单例写法历经了三个阶段:

第一阶段:仅加个getInstance。如下:

[codesyntax lang=”php”]

package
{
	public class Test
	{
		private static var instance:Test=null;
		public function Test()
		{
		}
		public static function getInstance():Test{
			if(instance==null){
				instance=new Test();
			}
			return instance;
		}
	}
}

[/codesyntax]

这种单例写法算是入门级的吧,无法防止别人通过new创建,只能靠人为的记住这个类是单例。

 

第二阶段:在构造函数抛错误

[codesyntax lang=”actionscript3″]

package
{
	public class Test
	{
		private static var instance:Test=null;
		public function Test()
		{
			if(instance!=null){
				throw new Error("this is a singleton class");
			}
		}
		public static function getInstance():Test{
			if(instance==null){
				instance=new Test();
			}
			return instance;
		}
	}
}

[/codesyntax]

这种写法,虽然可以防止别人通过new创建,但这要到运行的时候才会抛出错误。

第三阶段:加包外类参数

[codesyntax lang=”actionscript3″]

package
{
	public class Test
	{
		private static var instance:Test=null;
		public function Test(p:Param)
		{
		}
		public static function getInstance():Test{
			if(instance==null){
				instance=new Test(new Param());
			}
			return instance;
		}
	}
}
class Param{}

[/codesyntax]

这种写法可以在编写代码的时候就避免别人通过new来创建实例,比起运行时才报错要更好一些。

 

单例,感觉在系统里比较适合同于一些管理器之类的功能,比如资源加载管理器,声音管理器等等。当然整个系统架构里面也会经常用到。单例模式应该算是最常用的设计模式之一。当然,单例也不能滥用!

 

 

AIR使用Admob广告小结

AIR使用Admob广告小结

最近在研究移动应用,现在Andriod做点应用试试,花了一点时间做了个火车票查询的应用,上了几个平台看看效果,跑跑流程。

顾名思义,应用是实时查询火车票的官网余票信息,应用做好了,免费的,就也想着放点广告试试,这时候就发现AS3的苦逼。搞广告需要ANE,还好在网上找到了一个Admob的广告ANE,是个谷歌开源项目,具体我就不详细说了,做着写的有例子,就是替换下jar文件,添加ANE到项目直接调用就可以了,自己简单封装了一个工具类,顺便分享下(有待完善)。

[codesyntax lang=”actionscript3″]

package{
	import so.cuo.anes.admob.AdAlign;
	import so.cuo.anes.admob.AdEvent;
	import so.cuo.anes.admob.AdType;
	import so.cuo.anes.admob.Admob;

	public class ADAdmob
	{
		/**
		 *是否在显示广告
		 */
		public var isShowAd:Boolean=false;
		private var myAdmobId:String = "a150eeaece2a62e";
		private  static var m_instance:ADAdmob=null;
		public function ADAdmob(p:Param)
		{
		}

		public static function get instance():ADAdmob{
			return m_instance||=new ADAdmob(new Param());
		}

		/**
		 *显示广告
		 * @param x  X坐标
		 * @param y   Y坐标
		 * @param type 广告类型
		 * @param isAlgin 是否按照align来部分,如果true 以align为准  xy无效  否则false 则以 xy为准 align无效
		 * @param align 位置
		 *
		 */
		public function showAd(x:int=0,y:int=0,type:String=AdType.BANNER,isAlgin:Boolean=false,align:int = AdAlign.ALIGN_BOTTOM):void
		{
			var admob:Admob=Admob.getInstance();
			if(admob.isSupported){
				admob.setUnitId(myAdmobId);
				admob.dispatcher.addEventListener(AdEvent.onReceiveAd,this.adHandler);
				admob.dispatcher.addEventListener(AdEvent.onFailedToReceiveAd,this.ad2Handler);
				admob.dispatcher.addEventListener(AdEvent.onDismissScreen,c1Handler);
				admob.dispatcher.addEventListener(AdEvent.onPresentScreen,pressHandler);
				admob.dispatcher.addEventListener(AdEvent.onLeaveApplication,levelHandler);
				if(isAlgin){
					admob.showRelation(align,type);
				}else{
					admob.show(x,y,type);
				}
			}else{
				trace("not support");
			}
		}

		/**
		 *释放广告
		 *
		 */
		public function disposeAd():void{
			var admob:Admob=Admob.getInstance();
			admob.dispatcher.removeEventListener(AdEvent.onReceiveAd,this.adHandler);
			admob.dispatcher.removeEventListener(AdEvent.onFailedToReceiveAd,this.ad2Handler);
			admob.dispatcher.removeEventListener(AdEvent.onDismissScreen,c1Handler);
			admob.dispatcher.removeEventListener(AdEvent.onPresentScreen,pressHandler);
			admob.dispatcher.removeEventListener(AdEvent.onLeaveApplication,levelHandler);
			admob.dispose();
			isShowAd = false;
		}

		private function levelHandler(e:AdEvent):void
		{
			trace("level");
		}

		private function pressHandler(e:AdEvent):void
		{
			trace("press");

		}

		private function ad2Handler(e:AdEvent):void
		{
			trace("fail");
		}

		private function c1Handler(e:AdEvent):void
		{
			trace("Dismiss");
		}

		protected function adHandler(event:AdEvent):void
		{
			trace("receive ad");
			isShowAd = true;
		}
	}
}
class Param{}

[/codesyntax]

广告类,还有待完善,有需要的朋友可以直接拿走,至于广告id,可以到admob上注册下,建个项目就有id了,很简单的。

下面说下,我用Admob的时候遇到的问题,我按照作者的方法,做了demo,广告却一直出不来,不知道怎么回事,折腾了好几天也没搞明白,在我近乎放弃admob的时候,终于发现原因了,原来是因为我的手机刷了rom,然后host文件了加了一万多条广告屏蔽记录,当然,admob的广告就显示不出来了,改了host,终于,看广告条了,鸡冻啊!!!

如果你的广告也显示不出来,不妨看下是不是host被屏蔽了,另外360之类的手机杀毒软件也有可能会屏蔽你的广告。

下面是广告的效果,我直接截图我的应用:

0

train2

下面再贴一些相关的资料,有需要的朋友:

admobANE:(Andriod+ios)http://code.google.com/p/flash-for-mobile/

作者建的群:56892018   感谢作者[珠峰看雪]的无私奉献!

我的应用:火车票查询 http://www.mumayi.com/android-264372.html(木蚂蚁),实时查询火车票的,有兴趣的朋友也可以看下。

ANE作者的一篇admob的使用文章:

flash 加载admob广告ane  http://bbs.9ria.com/forum.php?mod=viewthread&tid=141414&fromuid=107509

还有一些其他的广告ANE:http://ane.qiow.net/ (这些没用过,有兴趣的朋友可以试试)

在使用广告的过程中有什么问题,也可以在此留言交流,抑或加作者的群一起讨论。