Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 从数组中的MovieClip访问函数-AS3_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 从数组中的MovieClip访问函数-AS3

Actionscript 3 从数组中的MovieClip访问函数-AS3,actionscript-3,flash,Actionscript 3,Flash,我正在制作一个2d射击游戏,尝试对不同类型的敌人进行不同的攻击。我把我的子弹和敌人放在两个数组中,然后使用for循环对子弹和敌人执行hitTestObject。这一切都是可行的,但是Bullet类中有一个公共静态函数,它以字符串的形式返回它的类型,而Bullet类中有一个公共静态函数,它接受字符串,然后使用开关来消除敌人受到的伤害。当我运行我的程序时,我不断得到错误#1069:在obj.QuickBullet上找不到属性getType,并且没有默认值 敌人的密码 package char {

我正在制作一个2d射击游戏,尝试对不同类型的敌人进行不同的攻击。我把我的子弹和敌人放在两个数组中,然后使用for循环对子弹和敌人执行hitTestObject。这一切都是可行的,但是Bullet类中有一个公共静态函数,它以字符串的形式返回它的类型,而Bullet类中有一个公共静态函数,它接受字符串,然后使用开关来消除敌人受到的伤害。当我运行我的程序时,我不断得到错误#1069:在obj.QuickBullet上找不到属性getType,并且没有默认值

敌人的密码

package char {

import flash.display.MovieClip;
import flash.events.Event;
import flash.display.Stage;

public class Enemy1 extends MovieClip {

    private var _type:String;
    private static var _health:Number;
    private var _vx:Number;
    private var _vy:Number;
    private var _stage:Stage;

    private static var _instance:Enemy1;

    public function Enemy1() {
        init();
    }

    private function init():void {
        //Vars
        _vx = -10;
        _vy = Math.random()*10;
        _health = 1;
        _stage = Main.getStage();
        _instance = this;

        //Listeners
        addEventListener(Event.ADDED_TO_STAGE, onAdded);
        addEventListener(Event.ENTER_FRAME, enemyLoop);
        addEventListener(Event.REMOVED_FROM_STAGE, onRemoved);

        //Add Enemy
        Main.getInstance().addChild(this);
    }

    //When Added
    private function onAdded(event:Event):void{
        //Set position
        this.x = _stage.stageWidth;
        this.y = Math.random() * _stage.stageHeight;
        //trace("Enemy created");

        dispatchEvent(new Event("enemyCreated", true));
    }

    //Loop
    private function enemyLoop(event:Event):void {
        //Move
        x += _vx;
        y += _vy;

        //Boundaries
        if ( this.y <= 0 + this.height/2){
            this.y = this.height/2;
            _vy *= -1;
        }
        if ( this.y >= _stage.stageHeight - this.width/2){
            this.y = _stage.stageHeight - this.width/2;
            _vy *= -1;
        }

        //Health cheack
        if ( _health <= 0){
            if (this.parent) {
                this.parent.removeChild(this);
            }
            trace(this + " is dead.");
        }
        //Leaves screen
        if (this.x <= -this.width){
            Main.getInstance().removeChild(this);
        }
    }

    public static function isHit(type:String):void{
        switch(type){
            case "power" :
                _health -= 1;
                break;
            case "quick" :
                _health -= 1;
                break;
            case "strong" :
                _health -= 1;
                break;
            default:
                    _health -= 1;
            }
        }

        public static function getEnemy1():Enemy1{
            return _instance;
        }

        //When Removed
        private function onRemoved(event:Event):void {
            removeEventListener(Event.ADDED_TO_STAGE, onAdded);
            removeEventListener(Event.ENTER_FRAME, enemyLoop);
            removeEventListener(Event.REMOVED_FROM_STAGE, onRemoved);
            //trace("enemy removed");
        }
    }

}
我正在使用的for循环

for (var i:int = 0; i < _enemies.length; i++){
for(var j:int = 0; j < _bullets.length; j++){
    if(_bullets[j].hitTestObject(_enemies[i])){
        if (_bullets[j].parent) {
                            _bullets[j].parent.removeChild(_bullets[j]);
                    }

                    _enemies[i].isHit(_bullets[j].getType());

                    _enemies.splice(i, 1);
                    _bullets.splice(j, 1);

                    i--;
                    j--;

                    Main.setScore(10);
                }
            }

        }
for(变量i:int=0;i<\u.length;i++){
对于(变量j:int=0;j<\u.length;j++){
if(_bullets[j].hitTestObject(_bullets[i])){
如果(_项目符号[j].父项){
_项目符号[j].parent.removeChild(_项目符号[j]);
}
_敌人[i].isHit(_子弹[j].getType());
_3.拼接(i,1);
_项目符号.拼接(j,1);
我--;
j--;
主芯(10);
}
}
}

从此代码中删除
静态

public static function getType():String{
    return TYPE;
}

从此代码中删除
static

public static function getType():String{
    return TYPE;
}

注意:您的错误是说
QuickBullet
上没有属性
getType()
,但您只为
PowerBullet
提供了代码

您将
静态
命名空间应用于
getType()
。这意味着您只能通过类本身而不是该类的实例调用此方法:

PowerBullet.getType();
如果删除
static
,您将能够像预期的那样在每个实例上访问该方法


附加说明:对于少数类成员,它似乎使用了
static
,而不像
health
isHit()
那样合乎逻辑。我建议您仔细阅读静态名称空间以更好地理解其用途。

注意:您的错误是说
QuickBullet
上没有属性
getType()
,但您只为
PowerBullet
提供了代码

您将
静态
命名空间应用于
getType()
。这意味着您只能通过类本身而不是该类的实例调用此方法:

PowerBullet.getType();
如果删除
static
,您将能够像预期的那样在每个实例上访问该方法


附加说明:对于少数类成员,它似乎使用了
static
,而不像
health
isHit()
那样合乎逻辑。我建议您阅读静态名称空间以更好地理解其用途。

非常感谢,我一定会阅读静态名称空间。非常感谢,我一定会阅读静态名称空间。