5006:ActionScript文件不能有多个外部可见定义:AND TypeError:错误#1006:hitTestObject不是函数

时间:2015-11-11 10:17:15

标签: actionscript-3 flash actionscript

此代码中有2个问题。 首先是: 5006:ActionScript文件不能有多个外部可见定义:Sprayer,bugs

我已经将多个Actionscripts放在一起创建了这个,我已经分开了这些类,我希望在一个符号框架上播放它。

第二个涉及: 错误#1006:hitTestObject不是函数

对于这个我试图让aagun / Sprayer失去健康然后生活,如果虫子触摸它,但我不知道为什么它说它不是一个功能。我用错了字吗?

感谢您的帮助,请点击此处

package Shooter{
import flash.display.*;
import flash.events.*;
import flash.utils.getTimer;

class Sprayer extends MovieClip{
    const speed:Number = 150.0;
    var lastTime:int; // animation time

    function Sprayer() {
        // initial location of gun
        this.x = 275;
        this.y = 340;

        // movement
        addEventListener(Event.ENTER_FRAME,moveGun);
    }

    function moveGun(event:Event) {
        // get time difference
        var timePassed:int = getTimer()-lastTime;
        lastTime += timePassed;

        // current position
        var newx = this.x;

        // move to the left
        if (MovieClip(parent).leftArrow) {
            newx -= speed*timePassed/1000;
        }

        // move to the right
        if (MovieClip(parent).rightArrow) {
            newx += speed*timePassed/1000;
        }

        // check boundaries
        if (newx < 10) newx = 10;
        if (newx > 540) newx = 540;

        // reposition
        this.x = newx;
    }

    // remove from screen and remove events
    function deleteGun() {
        parent.removeChild(this);
        removeEventListener(Event.ENTER_FRAME,moveGun);
    }
}
}

package BigBug{
import flash.display.*;
import flash.events.*;
import flash.utils.Timer;
import flash.text.TextField;
import flash.display.MovieClip;

    class bugs extends MovieClip {
    var dx:Number; // speed and direction
    var lastTime:int; // animation time

    function bugs(side:String, speed:Number, altitude:Number) {

        if (side == "left") {
            this.x = -50; // start to the left
            dx = speed; // fly left to right
            this.scaleX = 1; // reverse
        } else if (side == "right") {
            this.x = -50; // start to the right
            dx = -speed; // fly right to left
            this.scaleX = 1; // not reverse
        }
        this.y = altitude; // vertical position

        // choose a random plane
        this.gotoAndStop(Math.floor(Math.random()*4+1));

        // set up animation
        addEventListener(Event.ENTER_FRAME,movePlane);
        lastTime = getTimer();
    }

    function movePlane(event:Event) {
        // get time passed
        var timePassed:int = getTimer()-lastTime;
        lastTime += timePassed;

        // move plane
        this.x += dx*timePassed/2000;

        // check to see if off screen
        if ((dx < 0) && (x < -50)) {
            deletePlane();
        } else if ((dx > 0) && (x > 350)) {
            deletePlane();
        }

    }
    }
}





package Missiles{
import flash.display.*;
import flash.events.*;
import flash.utils.Timer;
import flash.text.TextField;
import flash.display.MovieClip;

class Bullets extends MovieClip {
        var dx:Number; // vertical speed
        var lastTime:int;

function Bullets(x,y:Number, speed: Number) {

    // set start position
    this.x = x;
    this.y = y;
    // get speed
    dx = speed;
    // set up animation
    lastTime = getTimer();
    addEventListener(Event.ENTER_FRAME,moveBullet);
}

 function moveBullet(event:Event) {
  // get time passed
    var timePassed:int = getTimer()-lastTime;
    lastTime += timePassed;

    // move bullet
    this.x += dx*timePassed/1000;

    // bullet past top of screen
    if (this.x < 0) {
        deleteBullet();
    }

}

// delete bullet from stage and plane list
 function deleteBullet() {
    MovieClip(parent).removeBullet(this);
    parent.removeChild(this);
    removeEventListener(Event.ENTER_FRAME,moveBullet);
}
}
}






package MainGame{
import flash.display.*;
import flash.events.*;
import flash.utils.Timer;
import flash.text.TextField;
import flash.display.MovieClip;
import Missiles.Bullets;
import Shooter.Sprayer;
import BigBug.bugs;

public class AirRaid extends MovieClip {
    private var aagun:Sprayer;
    private var airplanes:Array;
    private var buggood:Array;
    private var bullets:Array;
    public var leftArrow, rightArrow:Boolean;
    private var nextGbug:Timer;
    private var nextPlane:Timer;
    private var shotsLeft:int;
    private var shotsHit:int;

    public function startAirRaid() {
        // init score
        shotsLeft = 20;
        shotsHit = 0;
        showGameScore();

        // create gun
        aagun = new Sprayer();
        addChild(aagun);

        // create object arrays
        buggood = new Array();
        airplanes = new Array();
        bullets = new Array();

        // listen for keyboard
        stage.addEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
        stage.addEventListener(KeyboardEvent.KEY_UP,keyUpFunction);

        // look for collisions
        addEventListener(Event.ENTER_FRAME,checkForHits);

        // start planes flying
        setNextPlane();
        setNextGbug();
    }

    public function setNextPlane() {
        nextPlane = new Timer(1000+Math.random()*1000,1);
        nextPlane.addEventListener(TimerEvent.TIMER_COMPLETE,newPlane);
        nextPlane.start();
    }

    public function newPlane(event:TimerEvent) {
        // random side, speed and altitude
        if (Math.random() > .5) {
            var side:String = "left";
        } else {
            side = "right";
        }
        var altitude:Number = Math.random()*50+20;
        var speed:Number = Math.random()*150+150;

        // create plane
        var p:bugs = new bugs(side,speed,altitude);
        addChild(p);
        airplanes.push(p);

        // set time for next plane
        setNextPlane();
    }


    public function setNextGbug() {
        nextGbug = new Timer(1000+Math.random()*1000,1);
        nextGbug.addEventListener(TimerEvent.TIMER_COMPLETE,newGbug);
        nextGbug.start();
    }

    public function newGbug(event:TimerEvent) {
        // random side, speed and altitude
        if (Math.random() > .5) {
            var side:String = "left";
        } else {
            side = "right";
        }
        var altitude:Number = Math.random()*50+20;
        var speed:Number = Math.random()*150+150;

        // create Gbug
        var p:Good_bug = new Good_bug(side,speed,altitude);
        addChild(p);
        buggood.push(p);

        // set time for next Gbug
        setNextGbug();
    }





    // check for collisions
    public function checkForHits(event:Event) {
        for(var bulletNum:int=bullets.length-1;bulletNum>=0;bulletNum--){ 
            for (var airplaneNum:int=airplanes.length-1;airplaneNum>=0;airplaneNum--) {
                if (bullets[bulletNum].hitTestObject(airplanes[airplaneNum])) {
                    airplanes[airplaneNum].planeHit();
                    bullets[bulletNum].deleteBullet();
                    shotsHit++;
                    showGameScore();
                    break;
                }
            }
for(var bulletNum:int=bullets.length-1;bulletNum>=0;bulletNum--){ 
            for (var Good_bugNum:int=buggood.length-1;Good_bugNum>=0;Good_bugNum--) {
                if (bullets[bulletNum].hitTestObject(buggood[Good_bugNum])) {
                    buggood[Good_bugNum].GbugHit();
                    bullets[bulletNum].deleteBullet();
                    shotsHit--;
                    showGameScore();
                    break;
                }
            }
        }

        if ((shotsLeft == 0) && (bullets.length == 0)) {
            endGame();
        }

        }

        if ((shotsLeft == 0) && (bullets.length == 0)) {
            endGame();
        }
    }

    // key pressed
    public function keyDownFunction(event:KeyboardEvent) {
        if (event.keyCode == 37) {
            leftArrow = true;
        } else if (event.keyCode == 39) {
            rightArrow = true;
        } else if (event.keyCode == 32) {
            fireBullet();
        }
    }

    // key lifted
    public function keyUpFunction(event:KeyboardEvent) {
        if (event.keyCode == 37) {
            leftArrow = false;
        } else if (event.keyCode == 39) {
            rightArrow = false;
        }
    }

    // new bullet created
    public function fireBullet() {
        if (shotsLeft <= 0) return;
        var b:Bullets = new Bullets(aagun.x,aagun.y,-300);
        addChild(b);
        bullets.push(b);
        shotsLeft--;
        showGameScore();
    }

    public function showGameScore() {
        showScore.text = String("Score: "+shotsHit);
        showShots.text = String("Shots Left: "+shotsLeft);
    }

    // take a plane from the array
    public function removePlane(plane:bugs) {
        for(var i in airplanes) {
            if (airplanes[i] == plane) {
                airplanes.splice(i,1);
                break;
            }
        }
    }


    // take a Gbug from the array
    public function removeGbug(Gbug:Good_bug) {
        for(var i in buggood) {
            if (buggood[i] == Gbug) {
                buggood.splice(i,1);
                break;
            }
        }
    }


    // take a bullet from the array
    public function removeBullet(bullet:Bullets) {
        for(var i in bullets) {
            if (bullets[i] == bullet) {
                bullets.splice(i,1);
                break;
            }
        }
    }

    // game is over, clear movie clips
    public function endGame() {
        // remove planes
        for(var i:int=airplanes.length-1;i>=0;i--) {
            airplanes[i].deletePlane();
        }
        for(var i:int=buggood.length-1;i>=0;i--) {
            buggood[i].deleteGbug();
        }
        airplanes = null;
        buggood = null;
        aagun.deleteGun();
        aagun = null;

        stage.removeEventListener(KeyboardEvent.KEY_DOWN,keyDownFunction);
        stage.removeEventListener(KeyboardEvent.KEY_UP,keyUpFunction);
        removeEventListener(Event.ENTER_FRAME,checkForHits);

        nextPlane.stop();
        nextPlane = null;
        nextGbug.stop();
        nextGbug = null;


        gotoAndStop("gameover");
    }

}
}

1 个答案:

答案 0 :(得分:1)

1

  

5006:ActionScript文件不能有多个外部可见定义:Sprayer,bugs

正如它所说:文件中不能有多个公共定义。您必须将代码拆分为多个文件,或者将不需要公开的定义移出包中。

这可以在一个文件中找到:

package  
{   
    import flash.display.MovieClip; 
    // public is the default access modifier
    public class Test1 extends MovieClip 
    {   
        public function Test1() 
        {
            trace("test1");
            var t2:Test2 = new Test2();
            var t3:Test3 = new Test3();
        }
    }   
}

// Test2 and Test3 are defined outside of the package, otherwise it wouldn't compile.
// These definitions will only be visible to code in this file.

import flash.display.MovieClip;
class Test2 extends MovieClip 
{   
    public function Test2() 
    {
        trace("test2");
    }
}   

class Test3 extends MovieClip 
{   
    public function Test3() 
    {
        trace("test3");
    }
}   

2

  

错误#1006:hitTestObject不是函数

这通常意味着{I}没有在您试图从中调用它的对象(或它的祖先)上定义{尽管可能存在不同类型的错误)。

您的代码可以通过两种方式访问​​

hitTestObject()hitTestObject()airplanes.hitTestObject()。您必须调试代码以查看实际bullets[bulletNum].hitTestObject()airplanes的内容,它们是什么类型以及它们是否继承bullets[bulletNum]方法。你至少可以hitTestObject()