Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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 为什么flash输出TypeError:Error#2007:参数子项必须为非null。在flash.display::DisplayObjectContainer/addChild()处_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 为什么flash输出TypeError:Error#2007:参数子项必须为非null。在flash.display::DisplayObjectContainer/addChild()处

Actionscript 3 为什么flash输出TypeError:Error#2007:参数子项必须为非null。在flash.display::DisplayObjectContainer/addChild()处,actionscript-3,flash,Actionscript 3,Flash,这是我到目前为止的代码 package { import flash.display.MovieClip; import flash.events.*; public class Main extends MovieClip { var leftpressed:Boolean = false; var rightpressed:Boolean = false; public function Main()

这是我到目前为止的代码

package  {

    import flash.display.MovieClip;
    import flash.events.*;

    public class Main extends MovieClip {

        var leftpressed:Boolean = false;
        var rightpressed:Boolean = false;

        public function Main() 
        {
            //constructor code
            Spaceship.addEventListener(Event.ENTER_FRAME, moveToKey);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, setKeyPress);
            stage.addEventListener(KeyboardEvent.KEY_UP, setKeyUnpress);
            stage.addEventListener(KeyboardEvent.KEY_DOWN, FlyBullet);      
        }       

        function moveToKey (event:Event) 
        {
            if (leftpressed && (Spaceship.x>0))
            {
                Spaceship.x = -5;
            }
            if (rightpressed && (Spaceship.x<550))
            {
                Spaceship.x = +5;
            }

        }       

        function setKeyPress(e:KeyboardEvent):void 
        {
            if (e.keyCode == 37)
            {
                leftpressed = true;
            }
            if (e.keyCode == 39)
            {
                rightpressed = true;
            }
        }

        function setKeyUnpress(e:KeyboardEvent): void   
        {
            if (e.keyCode == 37)
            { 
                leftpressed = false;
            }
            if (e.keyCode == 39)
            {
                rightpressed = false;
            }

        }

        function FlyBullet (e:KeyboardEvent):void
        {           
            if (e.keyCode == 32)
            var bulletshot:Bullet = new Bullet();
            addChild(bulletshot);
            bulletshot.x = Spaceship.x;
            bulletshot.y = Spaceship.y
        }

    }
}
这就是你的问题:

if  (e.keyCode == 32)
var bulletshot:Bullet = new Bullet();
addChild(bulletshot);
bulletshot.x = Spaceship.x;
bulletshot.y = Spaceship.y
没有花括号,因此
if
条件仅适用于分配了
bulletshot
的第一行。换言之,如果您按下
SPACE
以外的任何键,它将跳过
bulletshot
的赋值,但仍然尝试
addChild(bulletshot)
,但由于
bulletshot
未被赋值,因此它是
null
,您会得到错误

我想你的意思是:

if (e.keyCode == Keyboard.SPACE) {
    var bulletshot:Bullet = new Bullet();
    addChild(bulletshot);
    bulletshot.x = Spaceship.x;
    bulletshot.y = Spaceship.y
}
PS:您的代码在很多地方缩进很差。使代码正确缩进会有帮助。自动格式化程序可以在这里帮助您。

这是您的问题:

if  (e.keyCode == 32)
var bulletshot:Bullet = new Bullet();
addChild(bulletshot);
bulletshot.x = Spaceship.x;
bulletshot.y = Spaceship.y
没有花括号,因此
if
条件仅适用于分配了
bulletshot
的第一行。换言之,如果您按下
SPACE
以外的任何键,它将跳过
bulletshot
的赋值,但仍然尝试
addChild(bulletshot)
,但由于
bulletshot
未被赋值,因此它是
null
,您会得到错误

我想你的意思是:

if (e.keyCode == Keyboard.SPACE) {
    var bulletshot:Bullet = new Bullet();
    addChild(bulletshot);
    bulletshot.x = Spaceship.x;
    bulletshot.y = Spaceship.y
}

PS:您的代码在很多地方缩进很差。使代码正确缩进会有帮助。自动格式化程序在这方面可以帮助您。

在多行if语句中省略括号通常被认为是不好的做法,这就是一个例子。每当
e.keyCode!=32
将尝试运行
addChild

解决办法是:

///...in the Main function//
stage.addEventListener(KeyboardEvent.KEY_DOWN, flyBullet);
///...
function flyBullet (e:KeyboardEvent):void
{

    if  (e.keyCode == 32)
    {
        var bulletshot:Bullet = new Bullet();
        addChild(bulletshot);
        bulletshot.x = Spaceship.x;
        bulletshot.y = Spaceship.y;
    }
}

一些不相关的as3代码质量提示,以避免以后可能出现的错误:

我猜Spaceship不是一个静态类,所以我建议变量/函数名使用小写字母,类使用大写字母,但这只是一个很好的实践,不会影响代码的正确性

定义函数的可访问性也是一种很好的做法,即
公共、私有、内部、受保护的
。如果省略它,则默认值为
内部


必要时只跳过条件句后的方括号。

在多行if语句中省略方括号通常被认为是不好的做法,这就是一个例子。每当
e.keyCode!=32
将尝试运行
addChild

解决办法是:

///...in the Main function//
stage.addEventListener(KeyboardEvent.KEY_DOWN, flyBullet);
///...
function flyBullet (e:KeyboardEvent):void
{

    if  (e.keyCode == 32)
    {
        var bulletshot:Bullet = new Bullet();
        addChild(bulletshot);
        bulletshot.x = Spaceship.x;
        bulletshot.y = Spaceship.y;
    }
}

一些不相关的as3代码质量提示,以避免以后可能出现的错误:

我猜Spaceship不是一个静态类,所以我建议变量/函数名使用小写字母,类使用大写字母,但这只是一个很好的实践,不会影响代码的正确性

定义函数的可访问性也是一种很好的做法,即
公共、私有、内部、受保护的
。如果省略它,则默认值为
内部


必要时只跳过条件后面的括号。

请指定您试图完成的内容(期望输出)。请指定您试图完成的内容(期望输出)。^与我的答案相同(在此之前发布)。此外,“在多行
if
语句中省略括号并不被认为是不好的做法”,没有括号的多行if语句是不可能的。我也很好奇在条件“必要”之后跳过括号。这不是必须的,这是可选的,主要取决于个人意见。^答案与我的相同(在此之前发布)。此外,“在多行
if
语句中省略括号并不被认为是不好的做法”,没有括号的多行if语句是不可能的。我也很好奇在条件“必要”之后跳过括号。这从来都不是必要的,这是可选的,很大程度上取决于个人意见。