1

取り組んでいる縦型シューティングゲームがあります。ランダムなオブジェクト(敵)を上からドロップダウンさせる方法を見つける必要があります。現時点では、動作している上からランダムにドロップダウンする敵が1人います。これが私が使用しているコードです。

メインコード

// Full Screen Command
fscommand("fullscreen","true");
stop();

//center player on screen
mcMain.x = 880,45;
mcMain.y = 940,40;

//these booleans will check which keys are down
var leftDown:Boolean = false;
var upDown:Boolean = false;
var rightDown:Boolean = false;
var downDown:Boolean = false;
//how fast the character will be able to go
var mainSpeed:int = 25;

//how much time before allowed to shoot again
var cTime:int = 0;
//the time it has to reach in order to be allowed to shoot (in frames)
var cLimit:int = 12;
//whether or not the user is allowed to shoot
var shootAllow:Boolean = true;

//how much time before another enemy is made
var enemyTime:int = 0;
//how much time needed to make an enemy
//it should be more than the shooting rate
//or else killing all of the enemies would
//be impossible :O
var enemyLimit:int = 16;

//the player's score
var score:int = 0; 

//this movieclip will hold all of the bullets
var bulletContainer:MovieClip = new MovieClip();
addChild(bulletContainer);

//whether or not the game is over
var gameOver:Boolean = false;

//adding a listener to mcMain that will move the character
mcMain.addEventListener(Event.ENTER_FRAME, moveChar);
function moveChar(event:Event):void{
//checking if the key booleans are true then moving
//the character based on the keys
if(leftDown){
    mcMain.x -= mainSpeed;
}
if(upDown){
    mcMain.y -= mainSpeed;
}
if(rightDown){
    mcMain.x += mainSpeed;
}
if(downDown){
    mcMain.y += mainSpeed;
}
//keeping the main character within bounds
if(mcMain.x <= 0){
    mcMain.x += mainSpeed;
}
if(mcMain.y <= 0){
    mcMain.y += mainSpeed;
}
if(mcMain.x >= stage.stageWidth - mcMain.width){
    mcMain.x -= mainSpeed;
}
if(mcMain.y >= stage.stageHeight - mcMain.height){
    mcMain.y -= mainSpeed;
}

    //Incrementing the cTime

//checking if cTime has reached the limit yet
if(cTime < cLimit){
    cTime ++;
} else {
    //if it has, then allow the user to shoot
    shootAllow = true;
    //and reset cTime
    cTime = 0;
}
//adding enemies to stage
if(enemyTime < enemyLimit){
    //if time hasn't reached the limit, then just increment
    enemyTime ++;
} else {
//defining a variable which will hold the new enemy
var newEnemy = new Enemy();
//making the enemy offstage when it is created
newEnemy.y = -1 * newEnemy.height;
//making the enemy's x coordinates random
//the "int" function will act the same as Math.floor but a bit faster
newEnemy.x = int(Math.random()*(stage.stageWidth - newEnemy.width));
//then add the enemy to stage
addChild(newEnemy);
//and reset the enemyTime
enemyTime = 0;
}
//updating the score text
txtScore.text = 'SCORE: '+score;
}
//this listener will listen for down keystrokes
stage.addEventListener(KeyboardEvent.KEY_DOWN, checkKeysDown);
function checkKeysDown(event:KeyboardEvent):void{
//making the booleans true based on the keycode
//WASD Keys or arrow keys
if(event.keyCode == 37 || event.keyCode == 65){
    leftDown = true;
}
if(event.keyCode == 39 || event.keyCode == 68){
    rightDown = true;
}

//checking if the space bar is pressed and shooting is allowed
if(event.keyCode == 32 && shootAllow){
//making it so the user can't shoot for a bit
shootAllow = false;
//declaring a variable to be a new Bullet
var newBullet:Bullet = new Bullet();
//changing the bullet's coordinates
newBullet.x = mcMain.x + mcMain.width/2 - newBullet.width/2;
newBullet.y = mcMain.y;
//then we add the bullet to stage
bulletContainer.addChild(newBullet);
mcMain.gotoAndPlay(1);
}
}
//this listener will listen for keys being released
stage.addEventListener(KeyboardEvent.KEY_UP, checkKeysUp);
function checkKeysUp(event:KeyboardEvent):void{
//making the booleans false based on the keycode
if(event.keyCode == 37 || event.keyCode == 65){
    leftDown = false;
}
if(event.keyCode == 39 || event.keyCode == 68){
    rightDown = false;
}

}

敵クラス

package{
//we have to import certain display objects and events
import flash.display.MovieClip;
import flash.events.*;
//this just means that Enemy will act like a MovieClip
public class Enemy extends MovieClip{
    //VARIABLES
    //this will act as the root of the document
    //so we can easily reference it within the class
    private var _root:Object;
    //how quickly the enemy will move
    private var speed:int = 5;
    //this function will run every time the Bullet is added
    //to the stage
    public function Enemy(){
        //adding events to this class
        //functions that will run only when the MC is added
        addEventListener(Event.ADDED, beginClass);
        //functions that will run on enter frame
        addEventListener(Event.ENTER_FRAME, eFrame);
    }
    private function beginClass(event:Event):void{
        _root = MovieClip(root);
    }
    private function eFrame(event:Event):void{
        //moving the bullet up screen
        y += speed;
        //making the bullet be removed if it goes off stage
        if(this.y > stage.stageHeight){
            removeEventListener(Event.ENTER_FRAME, eFrame);
            _root.removeChild(this);
        }
        //checking if it is touching any bullets
        //we will have to run a for loop because there will be multiple bullets
        for(var i:int = 0;i<_root.bulletContainer.numChildren;i++){
            //numChildren is just the amount of movieclips within 
            //the bulletContainer.

            //we define a variable that will be the bullet that we are currently
            //hit testing.
            var bulletTarget:MovieClip = _root.bulletContainer.getChildAt(i);

            //now we hit test
            if(hitTestObject(bulletTarget)){
                //remove this from the stage if it touches a bullet
                removeEventListener(Event.ENTER_FRAME, eFrame);
                _root.removeChild(this);
                //also remove the bullet and its listeners
                _root.bulletContainer.removeChild(bulletTarget);
                bulletTarget.removeListeners();
                //up the score
                _root.score += 5;
            }
        }

        //hit testing with the user
        if(hitTestObject(_root.deadLine)){
            //losing the game
            _root.gameOver = true;
            _root.gotoAndStop('lose');
        }

        //checking if game is over
        if(_root.gameOver){
            removeEventListener(Event.ENTER_FRAME, eFrame);
            this.parent.removeChild(this);
        }

    }
}
}

ここからチュートリアルを使用しています:http ://www.flashgametuts.com/tutorials/as3/how-to-make-a-vertical-shooter-in-as3-part-1/

どんな助けでも大いに感謝されます。

4

3 に答える 3

1

メインコードに接続されたタイマークラスを取得する必要があると思います。

グローバルカウンターを取得します。

   int count=0;
   int timeElapsedToNewEnemy = int((Math.random()*10+1)*10);
   //get u a number from 10 to 100

urタイマーを取得

   var time:Timer=new Timer(100,0);// each 1/10 seconds 
   time.start();
   time.addEventListener(TimerEvent.TIMER, countTime);

タイマーのur関数を取得します

   function countTime(e:TimerEvent):void
   {//increment ur timer
    count++;
if  (cont == timeElapsedToNewEnemy)
     {
    cont=0;//restar ur counter..
            //createUrNewEnemyHere  
            //get a new timeElapsedToEnemy
            timeElapsedToNewEnemy = int((Math.random()*10+1)*10);
     }
    }

これで、ランダムにx回ごとにランダムな敵を作成するように簡単に調整できます。

それがあなたのために働くかどうか私に知らせてください

于 2012-12-03T15:30:00.670 に答える
1

以前はフラッシュでゲームを作成していましたが、この条件を使用して常に敵をゲームに追加していました。

if (Math.floor(Math.random() * 90) == 5){

この条件下では、コードを使用して敵をランダムに1つ追加できます

于 2012-12-03T13:17:47.290 に答える
1

みんなありがとう、でも私は解決策を見つけました。

var newEnemy = new (getDefinitionByName("Enemy"+Math.floor(Math.random()*4)));

次に、敵のさまざまなムービークリップを敵として作成しました

于 2012-12-05T08:22:22.933 に答える