我正在制作太空入侵者克隆。敌人从屏幕的左侧开始,向右然后向下,但我想知道如何停止并向左转,作为原始的电子游戏。谢谢!
#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;
}
}
非常感谢你!
答案 0 :(得分:1)
将问题分成两部分:创建一个方法,可以相对于某个偏移量绘制所有(幸存的)敌人,并创建一个迭代器,为您提供所有偏移。
以下是迭代器的一些伪代码:
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位置