Buona sera a tutti,
sto muovendo i miei primi passi con as3 e mi trovo ad un punto morto.
Sto realizzando un giochino stile space invaders, in pratica una navicella che spara missili contro i nemici. Tutti i mc sono nella libreria e sono istanziati nello stage.
Premendo il tasto spazio inserisco nello stage un mc chiamato missile e vorrei che una volta nello stage il "missile" si spostasse sull'asse y fino alla fuoriuscita dallo stage.
Purtroppo sull'addEventListener continua a dirmi che passo una referenza sbagliata e non ne vengo fuori, vi posto qui lo script:
package engine{
import flash.display.*;
import flash.events.*;
import flash.text.*;
import fl.transitions.*;
import flash.net.*;
import flash.text.*;
public class Game extends MovieClip {
//------------------------------------------------------------------------
// constructor
// stage limit init
var leftLimit:Number=0;
var rightLimit:Number=261;
var upLimit:Number=0;
var downLimit:Number=361;
// ship init
var leftKeyDown:Boolean = false;
var upKeyDown:Boolean = false;
var rightKeyDown:Boolean = false;
var downKeyDown:Boolean = false;
var spaceKeyDown:Boolean = false;
var mainSpeed:Number = 15;
// missile init
var missileSpeed:Number = 15;
var missileIncr = 1;
var missileActive:Boolean = false;
// game init
public function gameStart():void{
ship();
bg();
}
//------------------------------------------------------------------------
// ship
public function ship ():void{
ship_mc.addEventListener(Event.ENTER_FRAME, moveShip);
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown);
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp);
}
// ship move
public function moveShip(event:Event):void{
if(leftKeyDown)
(ship_mc.x<=leftLimit)? ship_mc.x=leftLimit : ship_mc.x -= mainSpeed;
if(rightKeyDown)
(ship_mc.x>=rightLimit)? ship_mc.x=rightLimit : ship_mc.x += mainSpeed;
if(upKeyDown)
(ship_mc.y<=upLimit)? ship_mc.y=upLimit : ship_mc.y -= mainSpeed;
if(downKeyDown)
(ship_mc.y>=downLimit)? ship_mc.y=downLimit : ship_mc.y += mainSpeed;
if (spaceKeyDown){
if (missileActive==false){
missileActive=true;
var missile:missile_mc = new missile_mc();
addChild(missile);
missile.x=ship_mc.x+14;
missile.y=ship_mc.y-13;
missileIncr++;
missile.name='missile_'+missileIncr;
//missile.y-=1;
missile.addEventListener(Event.ENTER_FRAME, missileMove);
}
}
}
// key down ship
private function checkKeysDown(event:KeyboardEvent):void{
if(event.keyCode == 37 || event.keyCode == 65){
leftKeyDown = true;
}
if(event.keyCode == 38 || event.keyCode == 87){
upKeyDown = true;
}
if(event.keyCode == 39 || event.keyCode == 68){
rightKeyDown = true;
}
if(event.keyCode == 40 || event.keyCode == 83){
downKeyDown = true;
}
if(event.keyCode == 32){
spaceKeyDown = true;
}
}
// key up ship
private function checkKeysUp(event:KeyboardEvent):void{
if(event.keyCode == 37 || event.keyCode == 65){
leftKeyDown = false;
}
if(event.keyCode == 38 || event.keyCode == 87){
upKeyDown = false;
}
if(event.keyCode == 39 || event.keyCode == 68){
rightKeyDown = false;
}
if(event.keyCode == 40 || event.keyCode == 83){
downKeyDown = false;
}
if(event.keyCode == 32){
spaceKeyDown = false;
}
}
//------------------------------------------------------------------------
// missile
// missile move <--- questa è la parte che non funziona
public function missileMove(event:Event):void{
//missile=2;
//missile.y -= 50;
}
}
}

Rispondi quotando