2015-11-11 1 views
0

У меня есть 2 проблемы в этом коде. Первое: 5006: Файл ActionScript не может иметь более одного внешне видимое определения: Распылитель, ошибки5006: Файл ActionScript не может иметь более одного видимого извне определения: AND TypeError: Ошибка # 1006: hitTestObject не является функцией

Я положил несколько ActionScripts вместе, чтобы создать это, я уже отделен из классов, и я надеюсь воспроизведите это на кадре из символа.

и второе относится к: Error # 1006: hitTestObject не является функцией

Для этого я пытаюсь получить aagun/Распылитель потерять то здоровье живет, если ошибки прикоснуться к ней, но я» Я не знаю, почему он говорит, что это не функция. Я использую неправильные слова?

Спасибо за вашу помощь, вот код

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

1.

5006: An ActionScript file can not have more than one externally visible definition: 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.

Error #1006: hitTestObject is not a function

Это обычно означает, что hitTestObject() не определен на объект (или его предки) вы пытаетесь назвать от (хотя для этого могут быть разные ошибки).

hitTestObject() Доступен двумя способами в вашем коде: airplanes.hitTestObject() и bullets[bulletNum].hitTestObject(). Вам придется отлаживать код, чтобы узнать, что на самом деле airplanes и bullets[bulletNum], какие типы они есть и наследуют ли они метод hitTestObject(). Вы могли бы по крайней мере trace() их.

+0

Эй, спасибо за обновление .. Я изменил приведенный выше код ... Я попытался посмотреть на 5006: ошибка ActionScript с вашими комментариями и некоторыми исследованиями, но я все еще получаю ошибку. Теперь он говорит 5006: Файл ActionScript не может иметь более одного видимого извне определения: Shooter.Sprayer, BigBug.bugs «Можете ли вы сообщить мне, можете ли вы увидеть, что мне не хватает? – jbuzz

+1

Когда вы объявляете« пакет », вы обычно хотите, чтобы что-то в нем было видимым для внешнего кода. Если вы объявляете класс внутри пакета, он автоматически становится доступным извне, что препятствует вам помещать любые другие классы в один и тот же файл. Вы либо перемещаете другие классы OUTSIDE any пакеты, как я покажу в своем ответе, или вы перемещаете объявления для раздельных файлов. Помещение классов в отдельные пакеты в один файл не помогает. Нет конкретного способа обхода пути, потому что на самом деле нет проблемы. Что мешает вам использовать несколько файлы, интересно? –