【问题标题】:Y movement in Space Invaders (Unity)Space Invaders (Unity) 中的 Y 运动
【发布时间】:2014-07-05 03:43:33
【问题描述】:

我正在制作一个 Space Invaders 克隆。敌人从屏幕左侧开始,向右然后向下,但我想知道如何停止和向左移动,就像最初的电子游戏一样。谢谢!

  #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;
    }

}

非常感谢!

【问题讨论】:

    标签: unity3d unityscript


    【解决方案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 位置

    【讨论】:

    • 我是 JS 的新手,所以我不了解大部分代码。是否“不完美”并不重要,但我想将运动作为一个整体来学习这些脚本。无论如何,这是一个很好的答案,比你非常:)
    • 尝试将我的代码转换为 javascript 并在一个新的、独立的 HTML 页面中运行它,这样您就可以将输出打印到控制台或将其作为文本附加到某个 div 元素。您可能还想查看pivotal.github.com/jasmine 来测试您的代码。
    猜你喜欢
    • 2013-11-06
    • 1970-01-01
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多