【问题标题】:Enemy to spawn at specific locations在特定位置生成的敌人
【发布时间】:2014-01-21 20:46:29
【问题描述】:

我是 as3 的新手,我已经尝试寻找我的问题的答案。对于横向卷轴游戏,我在某些位置设置了敌人,我需要它们生成,而不仅仅是在游戏中的这些特定位置出现一次。这些是有关问题的时间线代码的摘录。

var enemyList:Array = new Array();

 function addEnemiesToLevel1():void
{
addEnemy (700, 125);
addEnemy (1000, 125);
addEnemy(2405, 125);
addEnemy(3300, -155);
}

if (enemyList.length > 0) 
{
    for (var i:int = 0; i < enemyList.length; i++) 
    {
 function addEnemy(xLocation:int, yLocation:int):void
 {
var enemy:Enemy = new Enemy(xLocation, yLocation);
back.addChild(enemy);
enemy.addEventListener(Event.REMOVED, enemyRemoved);
enemyList.push(enemy);
 }

敌人被绑定到一个控制向玩家移动的类文件

package  {
    import flash.display.MovieClip;
    import flash.events.Event;

    public class Enemy extends MovieClip {
        private var xSpeedConst:int = 6;

        public function Enemy(xLocation:int, yLocation:int) {
            // constructor code
            x = xLocation;
            y = yLocation;
            addEventListener(Event.ENTER_FRAME, loop);
        }

        public function loop(e:Event):void {

                x -= xSpeedConst;   
             }

        public function removeSelf():void {
            trace("remove enemy");
            removeEventListener(Event.ENTER_FRAME, loop);
            this.parent.removeChild(this);
        }

    }

}

敌人也会发生碰撞,所以我不想过多地更改代码,因为我可能会破坏某些东西。如果我必须添加 Timer,请告诉我确切的位置,因为我已经尝试过但失败了。感谢您的帮助。

【问题讨论】:

    标签: actionscript-3 flash location


    【解决方案1】:

    虽然我建议不要在时间线中编码,但时间线中的工作示例计时器设置如下所示:

    var timer:Timer = new Timer(2000,0);
    timer.addEventListener(TimerEvent.TIMER, createEnemy);
    
    function createEnemy(e:TimerEvent):void{
        //create a new enemy, pass the x and y you want (xPos and yPos here)
        //var xPos:int, yPos:int
        var enemy:Enemy = new Enemy( xPos, yPos );
        back.addChild(enemy);
    }
    
    timer.start();
    

    如果你在那里生成敌人,你也可以在你的类文件中进行类似的设置。同样,在时间线中执行此操作将更加难以维护和调试。

    【讨论】:

    • 谢谢!这很好用。你能告诉我如何分配敌人从几个 x 和 y 位置而不是一个位置出来吗?我需要删除将敌人添加到 1 级功能吗?我将如何在 2 级控制它们?很抱歉他们不让我在常规答案框中发布问题,所以我必须在这里用这些微型字母发布。
    • 好吧,我不确定你到底想怎么做,但你可能只是有一个你希望它们产生的点数组,然后循环数组并执行var enemy:Enemy = new Enemy( myArray[i].x, myArray[i].y );将在解决方案中。
    • 我可以在这段代码之上再添加 2 个位置吗: varenemy:Enemy = new Enemy(xPos, yPos);或者那是不可能的?
    • 我不完全确定我理解这个问题。你想在不同的位置再制造 2 个敌人,还是想让你制造的敌人去 3 个可能的位置中的 1 个?
    • 对不起,你是对的。我喜欢从其他 2 个位置再生成 2 个相同的敌人,同时总共 3 个。我已经设置了第一个,所以如果我可以在 (varenemy:Enemy = new Enemy(xPos, yPos)) 代码的顶部添加另外两个,那就太好了。
    猜你喜欢
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2013-03-10
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-17
    • 1970-01-01
    相关资源
    最近更新 更多