我正在创建一个跟随我的化身的子弹,一旦我击中空格键就会产生但是我对如何提供速度/轨迹到所述物体与我的敌人发生碰撞有点困惑。任何帮助都可以。
游戏文件
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.utils.Timer;
import flash.events.TimerEvent;
import flash.events.KeyboardEvent;
import flash.ui.Keyboard;
import flash.external.ExternalInterface;
import flash.display.Sprite;
import flash.utils.*;
public class SpaceVigilanteGame extends MovieClip
{
public var army:Array;
public var avatar:Avatar;
public var bullet:Bullet;
public var gameTimer:Timer;
public var useMouseControl:Boolean;
public var rightKeyIsBeingPressed:Boolean;
public var leftKeyIsBeingPressed:Boolean;
public var spaceBarIsBeingPressed:Boolean;
var gameWidth:int = 0;
var gameHeight:int = 0;
public function log(message:String):void
{
trace (message);
if (ExternalInterface.available)
{
ExternalInterface.call('console.log', message);
}
}
public function SpaceVigilanteGame()
{ useMouseControl = false;
leftKeyIsBeingPressed = false;
rightKeyIsBeingPressed = false;
spaceBarIsBeingPressed = false;
army = new Array();
var newEnemy = new Enemy( 60, 30 );
army.push( newEnemy );
addChild( newEnemy );
avatar = new Avatar();
addChild( avatar );
if ( useMouseControl )
{
avatar.x = mouseX;
avatar.y = mouseY;
}
else
{
avatar.x = 50;
avatar.y = 400;
}
gameWidth = stage.stageWidth;
gameHeight = stage.stageHeight;
gameTimer = new Timer( 25 );
gameTimer.addEventListener( TimerEvent.TIMER, moveEnemy );
gameTimer.addEventListener( TimerEvent.TIMER, moveAvatar );
gameTimer.addEventListener( TimerEvent.TIMER, shoot );
gameTimer.start();
stage.addEventListener( KeyboardEvent.KEY_DOWN, onKeyPress );
stage.addEventListener( KeyboardEvent.KEY_UP, onKeyRelease );
//Respawn enemies
var myInterval:uint = setInterval (spawnEnemy, 2000);
function spawnEnemy(){
var posX = Math.floor(Math.random() * (660 - 25 + 1)) + 35;
var newEnemy = new Enemy( posX, 30 );
army.push( newEnemy );
addChild( newEnemy );
}
function onKeyPress( keyboardEvent:KeyboardEvent ):void
{
if ( keyboardEvent.keyCode == Keyboard.RIGHT )
{
rightKeyIsBeingPressed = true;
}
else if ( keyboardEvent.keyCode == Keyboard.LEFT )
{
leftKeyIsBeingPressed = true;
}
else if (keyboardEvent.keyCode == Keyboard.SPACE )
{
spaceBarIsBeingPressed = true;
}
}
function onKeyRelease( keyboardEvent:KeyboardEvent ):void
{
if ( keyboardEvent.keyCode == Keyboard.RIGHT )
{
rightKeyIsBeingPressed = false;
}
else if (keyboardEvent.keyCode ==Keyboard.LEFT )
{
leftKeyIsBeingPressed = false;
}
else if (keyboardEvent.keyCode == Keyboard.SPACE )
{
spaceBarIsBeingPressed = false;
}
}
}
public function moveEnemy( timerEvent:TimerEvent ):void
{
// Set up Enemy Array
for each ( var enemy:Enemy in army )
{
if ( avatar.hitTestObject( enemy ) )
{
// game over screen
gameTimer.stop();
var gameOverScreen:GameOverScreen = new GameOverScreen();
gameOverScreen.x = 0;
gameOverScreen.y = 0;
addChild( gameOverScreen );
}
// Have enemy move to one side of the screen, drop down a pixel, and move into the other direction
else if(enemy.x+enemy.width+2<=gameWidth)
{
enemy.moveRight();
}
else if(enemy.y+enemy.height+2<=gameHeight)
{
enemy.moveDown();
}
else if(enemy.x-2>=0)
{
enemy.moveLeft();
}
else if(enemy.y-2>=0)
{
enemy.moveUp();
}
//Loop enemy back to top
if (enemy.y >= 460){
var newEnemy = new Enemy( 60, 30 );
army.push( newEnemy );
addChild( newEnemy );
enemy.y = 0;
}
}
}
public function moveAvatar( timerEvent:TimerEvent ):void
{
// Boolean statement is set to false, so that the mouse control doesn't work
if ( useMouseControl )
{
avatar.x = mouseX;
avatar.y = mouseY;
}
// move avatar left and right
else if ( rightKeyIsBeingPressed )
{
if (avatar.x <= 660){
avatar.moveRight();
}
}
else if ( leftKeyIsBeingPressed )
{
if (avatar.x >= 35){
avatar.moveLeft();
}
}
}
// shoot bullet
public function shoot (timerEvent:TimerEvent ):void
{
if ( spaceBarIsBeingPressed )
{
bullet = new Bullet(avatar.x, avatar.y);
addChild( bullet );
bullet.moveBullet();
}
}
}
}
Bullet Class
package
{
import flash.display.MovieClip;
public class Bullet extends MovieClip
{
public function Bullet(xPos:Number, yPos:Number)
{
x = xPos;
y = yPos;
}
public function moveBullet():void
{
y += 2;
}
}
}