Generación de plataformas AS3

Estoy tratando de generar infinitamente plataformas x distancia frente al jugador y prácticamente no tengo idea de por dónde empezar. Además, no pueden "apilarse" uno encima del otro. Actualmente, lo que tengo está debajo, no hay errores, aunque ocupa bastante memoria y mi juego se retrasa hasta el punto de fallar flash cs3

function enterFrameHandler(e:Event):void{
    //gravitate the player
    _vy += 1.5;
    //move the player
    Player.x += _vx;
    Player.y += _vy;

    //process collisions
    processCollisions();
    //Process other collisions
    processOtherCollisions();
    //scroll the stage
    scrollStage();
    //Process Key Presses
    KeyHandler();
    //Process Lives once
    LifeHandler();
    //Generate Objects
    generateObjects();
}
//Function for generating objects
var ObjectArray:Array = [];
var ChildrenColliding:Boolean = false;
function generateObjects():void{
    if(_vx > 0){
        var Square:MovieClip;
        Square = new mcSquare();
        Square.x = Math.random() * 500 + Math.abs(_boundaries.x);
        Square.y = Math.random() * stage.stageHeight/2.5 + (stage.stageHeight/2.5);
        ObjectArray.push(Square);
        _boundaries.addChild(Square);
    }
    for(var i in ObjectArray){
        for(var a in ObjectArray){
            if(ObjectArray[a].hitTestObject(ObjectArray[i]) && a != i){
                ChildrenColliding = true;
            }
        }
        while(ChildrenColliding){
        ObjectArray[i].x = Math.random() * 500 + Math.abs(_boundaries.x);
        ObjectArray[i].y = Math.random() * stage.stageHeight/2.5 + (stage.stageHeight/2.5);
        }
    }

}

preguntado el 22 de mayo de 12 a las 19:05

Como nota al margen, su código AS3 es confuso desde una perspectiva idiomática. Las variables en AS3 tienden a ser camelCased (oa veces subrayado_nombrado) donde las clases tienden a ser PascalCased. La mezcla de estas cubiertas hace que sea difícil de leer. -

2 Respuestas

El código que muestras aquí está bien. Ajuste ObjectArray as [] es perfectamente seguro y no debe ser nulo. Debe haber más en la historia.

¿Puedes publicar el resto de tu código para esta clase? ¿Tienes algún otro código que establezca ObjectArray? Debe haber una línea de código en algún otro lugar que establezca ObjectArray que lo está configurando en nulo.

contestado el 22 de mayo de 12 a las 19:05

En serio, ese es el único lugar donde toco ObjectArray o Square, nunca se hace referencia a ningún otro lugar: Cory

@Cory Si no se menciona en ningún otro lugar, ¿cuál es el propósito? ¿Por qué empujar objetos sobre él? ¿Por qué es una variable miembro privada? ¿Puedes mostrarnos el resto de la clase? Nos falta el panorama general y no podemos ayudarte más sin ver el resto del código. - Brian Genisio

Bueno, mi objetivo es verificar que los objetos en la matriz no colisionen entre sí para evitar que se apilen uno encima del otro. - Cory

Por qué no solo:

ObjectArray.push(Square);

contestado el 22 de mayo de 12 a las 21:05

eso me está dando un error de referencia de objeto nulo, cuando comento la matriz, ese error desaparece: Cory

No es var ObjectArray:Array = []; definido dentro de alguna otra función por casualidad? - strah

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.