Citrus Engine 学习笔记 第一弹 入口类和引擎demo

来源:互联网 发布:海盗湾域名 编辑:程序博客网 时间:2024/04/28 22:29

官网教程页面http://citrusengine.com/tutorials/上的入门视频教程讲得很详细,但是那是老版本的了,新版本比如我用的CEV3.1.9,那样写会报错,试了很多方法,最后在这个页面http://wiki.starling-framework.org/citrus/multi_resolution 找到解决,大概就是用一个入口类的模式来写。写法如下:

主类

package {import citrus.core.starling.StarlingCitrusEngine;/** * ... * @author Roshan */[SWF(backgroundColor="#FFFFFF", frameRate="60", width="800", height="600")]public class Main extends StarlingCitrusEngine{public function Main(){}override public function initialize():void{setUpStarling(true);}override public function handleStarlingReady():void {state = new GameState();}}}

其中千万不能漏掉

override public function handleStarlingReady():void {state = new GameState();}
这段,重载的这函数是当引擎初始化后就绪后所做的操作,所以把新建GameState放在这里,而不是原来那种直接写在
initialize()

函数里面,这个貌似是机制问题,不这样写会Flash Player会报错,说主类没有继承StarlingCitrusEngine,或者没调用setUpStarling()方法。



然后,新建一个GameState类,这个类的写法可以照搬官网demo的例子,自己参考api http://citrusengine.com/documentation/ 调用下各个组件试一试,比如:

package  {import Box2D.Collision.b2AABB;import Box2D.Collision.b2ContactID;import Box2D.Dynamics.Contacts.b2Contact;import citrus.core.starling.StarlingState;import citrus.objects.platformer.box2d.Coin;import citrus.objects.platformer.box2d.Enemy;import citrus.objects.platformer.box2d.Hero;import citrus.objects.platformer.box2d.MovingPlatform;import citrus.objects.platformer.box2d.Platform;import citrus.physics.box2d.Box2D;/** * ... * @author Roshan */public class GameState extends StarlingState {public function GameState() {super();}override public function initialize():void {super.initialize();var physics:Box2D = new Box2D("box2D");physics.visible = true;add(physics);add(new Platform("p1", {x:700, y:stage.stageHeight/4, width:stage.stageWidth/5,height:40}));var floor:Platform = new Platform("floor",{x:512,y:550,width:1024,height:40});add(floor);var mp:MovingPlatform = new MovingPlatform("Moving" ,{x:200,y:450,width:100, height:35, startX:200, startY:450, endX:500, endY:200,speed:3} );add(mp);var hero:Hero = new Hero("Roshan", { x:50, y:50, width:75, height:100 } );add(hero);var enemy:Enemy = new Enemy("tiger", { x:500, y:500, width:60, height:40,leftBound:100, rightBound:700, speed:2 } );add(enemy);var ring:Coin = new Coin ("ring", { x:750, y:60, width: 50, height:50 } );ring.onBeginContact.add(function(c:b2Contact):void {trace("Roshan Win!");remove(ring);})add(ring);}}}
然后设定下Main.as为文档类,运行下就能看到效果了。


总结下,其实就是把原来initialize()的内容分离到handleStarlingReady()中处理,也可以加入其他内容,比如官方例子multi_resolution的做法,在这里处理适配不同分辨率的操作:

override public function handleStarlingReady():void{assetManager = new AssetManager(scaleFactor);assetManager.verbose = true; assetManager.enqueue("assets" + scaleFactor + "x"); assetManager.loadQueue(function(ratio:Number):void{if (ratio == 1)state = new FirstState();});}
菜鸟自学日记就先记录到这,埋个坑以防自己忘了,呵呵
 

0 0
原创粉丝点击