2

スペースインベーダーのクローンを作っています。敵は画面の左側から始まり、右に移動してから下に移動しますが、元のビデオゲームのように停止して左に移動する方法を知りたいです。ありがとう!

  #pragma strict

// ESTADOS DEL ESCUADRON

enum TIPOS_MOVIMIENTO{
    ABAJO = 0,
    IZQ = 1,
    DER = 2,
    PARADO = 3
}

var estado : TIPOS_MOVIMIENTO;
private var cacheTransform : Transform;
var limitelateral : int;
var velocidad : float ;
private var vectorMov : Vector3;

function Start () {
    cacheTransform = transform;

}

function Update () {
    ComprobarEstado();
}


function ComprobarEstado(){
    switch(estado){
        case TIPOS_MOVIMIENTO.ABAJO:
            // TODO: mueve abajo el escuadron
            if(cacheTransform.position.x <= limitelateral) {
            vectorMov = Vector3.down * velocidad;
            cacheTransform.Translate(vectorMov * Time.deltaTime);
            } else {
                estado = TIPOS_MOVIMIENTO.IZQ;

            }
        break;
        case TIPOS_MOVIMIENTO.DER:
            // TODO: mueve der el escuadron
            // Si el escuadron esta menor que el limite, mueve derecha
            if(cacheTransform.position.x < limitelateral){
                vectorMov = Vector3.right * velocidad;
                cacheTransform.Translate(vectorMov * Time.deltaTime);
            } else {
                estado = TIPOS_MOVIMIENTO.ABAJO;

            }
        break;
        case TIPOS_MOVIMIENTO.IZQ:
            // TODO: mueve izq el escuadron
            if(cacheTransform.position.x > limitelateral)
            {
                vectorMov = Vector3.left * velocidad;
                cacheTransform.Translate(vectorMov * Time.deltaTime);
            } else {
                estado = TIPOS_MOVIMIENTO.ABAJO;

            }
        break;
        case TIPOS_MOVIMIENTO.PARADO:
            // TODO: detiene el escuadron
            if(cacheTransform.position.y < limitelateral){
                vectorMov = Vector3.down * 0;
                cacheTransform.Translate(vectorMov * Time.deltaTime);
            }
        break;
    }

}

どうもありがとうございます!

4

1 に答える 1

1

問題を 2 つに分割します。オフセットを基準にしてすべての (生き残った) 敵をペイントできるメソッドを作成し、すべてのオフセットを提供する反復子を作成します。

イテレータの擬似コードを次に示します。

init() {
   x = 0
   y = 0

   width = 5
   maxHeight = 5
}

next() {
    x ++
    if( x >= width ) {
        y ++
        x = 0
    }
    return y < maxHeight
}

getX() {
    return ( y & 1 ) ? width - x : x
}

next()false を返すまで呼び出しgetX()、現在の y オフセットの正しい X 位置を取得します。

于 2012-05-31T13:54:03.727 に答える