使用FLEX和 Actionscript 开发FLASH游戏(六)-6

使用FLEXActionscript开发FLASH 游戏-碰撞检测(第六页)

Level.as

package

{

    import flash.events.*;

    import flash.geom.*;

    import flash.media.*;

    import flash.net.*;

    import flash.utils.*;

    import mx.collections.ArrayCollection;

    import mx.core.*;

    public class Level

    {

        protected static var instance:Level=null;

        protected static const TimeBetweenLevelElements:Number=2;

        protected static const TimeBetweenEnemies:Number=3;

        protected static const TimeBetweenClouds:Number=2.5;

        protected static const TimeToLevelEnd:Number=2;

        protected var timeToNextLevelElement:Number=0;

        protected var levelElementGraphics:ArrayCollection=new ArrayCollection();

        protected var timeToNextEnemy:Number=0;

        protected var enemyElementGraphics:ArrayCollection=new ArrayCollection();

        protected var timeToNextCloud:Number=0;

        protected var timeToLevelEnd:Number=0;

        public var levelEnd:Boolean=false;

        static public function get Instance():Level

        {

            if(instance==null)

                instance=new Level();

            return instance;

        }

        public function Level(caller:Function=null)

        {

            if(Level.instance!=null)

                throw new Error("Only one Singleton instance should be instantiated");

            levelElementGraphics.addItem(ResourceManager.SmallIslandGraphics);

            levelElementGraphics.addItem(ResourceManager.BigIslandGraphics);

            levelElementGraphics.addItem(ResourceManager.VolcanoIslandGraphics);

            enemyElementGraphics.addItem(ResourceManager.SmallBluePlaneGraphics);

            enemyElementGraphics.addItem(ResourceManager.SmallGreenPlaneGraphics);

            enemyElementGraphics.addItem(ResourceManager.SmallWhitePlaneGraphics);

        }

        public function startup():void

        {

            timeToNextLevelElement=0

            new Player().startupPlayer();

            timeToLevelEnd=TimeToLevelEnd;

            levelEnd=false;

        }

        public function shutdown():void

        {

        }

        public function enterFrame(dt:Number):void

        {

            //add a background element

            timeToNextLevelElement-=dt;

            if(timeToNextLevelElement<=0)

            {

                timeToNextLevelElement=TimeBetweenLevelElements;

                var graphics:GraphicsResource=levelElementGraphics.getItemAt

                (MathUtils.randomInteger(0,levelElementGraphics.length))as GraphicsResource;

                var backgroundLevelElement:BackgroundLevelElement=

                BackgroundLevelElement.pool.ItemFromPool as BackgroundLevelElement;

                backgroundLevelElement.startupBackgroundLevelElement(

                graphics,

                new Point(Math.random()*Application.application.width,-graphics.bitmap.height),

                ZOrders.BackgroundZOrder,

                50);

            }

            //add an enemy

            timeToNextEnemy-=dt;

            if(timeToNextEnemy<=0)

            {

                timeToNextEnemy=TimeBetweenEnemies;

                var enemygraphics:GraphicsResource=enemyElementGraphics.getItemAt

                (MathUtils.randomInteger(0,enemyElementGraphics.length))as GraphicsResource;

                var enemy:Enemy=Enemy.pool.ItemFromPool as Enemy;

                enemy.startupBasicEnemy(

                enemygraphics,

                new Point(Math.random()*Application.application.width,-

                enemygraphics.bitmap.height),

                55);

            }

            //add cloud

            timeToNextCloud-=dt;

            if(timeToNextCloud<=dt)

            {

                timeToNextCloud=TimeBetweenClouds;

                var cloudsBackgroundLevelElement:BackgroundLevelElement=

                BackgroundLevelElement.pool.ItemFromPool as BackgroundLevelElement;

                cloudBackgroundLevelElement.startupBackgroundLevelElement(

                ResourceManager.CloudGraphics,

                new Point(Math.random()*Application.application.width,-

                ResourceManager.CloudGraphics.bitmap.height),

                ZOrders.CloudsBelowZOrder,

                75);

            }

            if(levelEnd)

                timeToLevelEnd-=dt;

            if(timeToLevelEnd<=0)

                Application.application.currentState="MainMenu";

        }

    }

}

Level类中做的改变仅仅让它在游戏者死亡时通过levelEnd属性被告知。当在enterFrame函数中使用timeToLevelEnd属性设置一个倒数计数器时,而且当timeToLevelEnd0时状态被返回到MainMenu让我们回到主菜单屏幕。

   碰撞检测在任何动作游戏中都是基本的。在本系列论文中我们实现了一个简单的,但是有效的碰撞检测系统,使得游戏者现在可以和游戏中的其他元素交互作用了,看起来就好像能够射下敌机。不幸的是目前的射下敌机实际上不是很令人满意,因为它们只是消失了。在本系列第七部分我们将增加一些动画到游戏里,来做一个好的爆炸效果。

   http://flexfighters.sourceforge.net/flexfighters6.html处可查看最终效果,从 https://sourceforge.net/project/showfiles.php?group_id=241490&package_id=293860&release_id=632042处可下载资源。

<Previous Page |  page: 1 2 3 4 5 6| Next Article in Series>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值