#actionscript-3 #flash #variables #for-loop #actionscript
#actionscript-3 #flash #переменные #for-цикл #actionscript
Вопрос:
Я пытаюсь создать платформер со случайно сгенерированными платформами, но до сих пор мне приходилось объявлять каждую платформу одну за другой. Для меня это проблема, потому что, если я хочу сделать, скажем, сто этажей до своего уровня, мне нужно объявить 100 спрайтов, затем столкновение для каждого спрайта. Есть ли какой-либо более простой способ сделать это, кроме того, как я делал это до сих пор?
Это то, что у меня есть:
public var piso1:Sprite;
public var piso2:Sprite;
public var piso3:Sprite;
public var piso4:Sprite;
public var piso5:Sprite;
public var piso6:Sprite;
public var piso7:Sprite;
public var piso8:Sprite;
public var piso9:Sprite;
public var piso10:Sprite;
public var piso11:Sprite;
public var piso12:Sprite;
public var piso13:Sprite;
public var piso14:Sprite;
public var piso15:Sprite;
public var piso16:Sprite;
public var piso17:Sprite;
public var piso18:Sprite;
public var piso19:Sprite;
public var piso20:Sprite;
public var pisoganar:Sprite;
Поскольку это спрайты, вот как я их создаю:
public function cuadrados():void
{
for (var i:int =0; i<20; i )
{
pisos[i] = dibujarCuadrado(0x000000, 100 (Math.random() * (200 - 50 1) 1), 25);
}
piso2 = pisos[0]
piso3 = pisos[1]
piso4 = pisos[2]
piso5 = pisos[3]
piso6 = pisos[4]
piso7 = pisos[5]
piso8 = pisos[6]
piso9 = pisos[7]
piso10 = pisos[8]
piso11 = pisos[9]
piso12 = pisos[10]
piso13 = pisos[11]
piso14 = pisos[12]
piso15 = pisos[13]
piso16 = pisos[14]
piso17 = pisos[15]
piso18 = pisos[16]
piso19 = pisos[17]
piso20 = pisos[18]
}
И затем я устанавливаю позицию каждой из них, одну за другой:
piso1.x = stage.stageWidth /2;
piso1.y = 600;
piso2.x = stage.stageWidth /2;
piso2.y = 500;
piso3.x = piso2.x - (Math.random() * (400 - 100 1) 100);
piso3.y = 400;
piso4.x = piso3.x (Math.random() * (400 - 100 1) 100);
piso4.y = 300;
piso5.x = piso4.x - (Math.random() * (400 - 100 1) 100);
piso5.y = 200;
piso6.x = piso5.x (Math.random() * (400 - 100 1) 100);
piso6.y = 100;
piso7.x = piso6.x - (Math.random() * (400 - 100 1) 100);
piso7.y = 0;
piso8.x = piso7.x (Math.random() * (400 - 100 1) 100);
piso8.y = -100;
piso9.x = piso8.x - (Math.random() * (400 - 100 1) 100);
piso9.y = -200;
piso10.x = piso9.x (Math.random() * (400 - 100 1) 100);
piso10.y = -300;
piso11.x = piso10.x - (Math.random() * (400 - 100 1) 100);
piso11.y = -400;
piso12.x = piso11.x (Math.random() * (400 - 100 1) 100);
piso12.y = -500;
piso13.x = piso12.x - (Math.random() * (400 - 100 1) 100);
piso13.y = -600;
piso14.x = piso13.x (Math.random() * (400 - 100 1) 100);
piso14.y = -700;
piso15.x = piso14.x - (Math.random() * (400 - 100 1) 100);
piso15.y = -800;
piso16.x = piso15.x (Math.random() * (400 - 100 1) 100);
piso16.y = -900;
piso17.x = piso16.x - (Math.random() * (400 - 100 1) 100);
piso17.y = -1000;
piso18.x = piso17.x (Math.random() * (400 - 100 1) 100);
piso18.y = -1100;
piso19.x = piso18.x - (Math.random() * (400 - 100 1) 100);
piso19.y = -1200;
piso20.x = piso19.x (Math.random() * (400 - 100 1) 100);
piso20.y = -1300;
pisoganar = dibujarCuadrado(0x00FF00,800, 25);
pisoganar.x = stage.stageWidth / 2;
pisoganar.y = -1400;
Итак, да. Много кода. Есть ли какой-либо способ упростить это? (Я изначально испанец, поэтому все переменные на испанском. «Piso» означает этаж, «cuadrados» — квадрат, а «dibujarcuadrado» — это моя функция рисования квадрата, в основном она создает, заполняет и размещает квадрат на сцене) Спасибо!
Ответ №1:
Нет необходимости иметь так много избыточного кода. Предполагая, что dibujarCuadrado
возвращает Sprite
, вы можете сделать это вместо ВСЕГО опубликованного кода:
var tmpSprite:Sprite; //only need to define one
var tmpX:Number = stage.stageWidth /2; //store the current x
var tmpY:Number = 600; //store the starting y
var tmpRand:Number; //temporary variable to hold the random value every iteration
var pisos:Vector.<Sprite> = new Vector.<Sprite>(); //this array holds all your sprites
for (var i:int =0; i<20; i )
{
tmpSprite = dibujarCuadrado(0x000000, 100 (Math.random() * (200 - 50 1) 1), 25);
pisos.push(tmpSprite); //add to the array
tmpRand = (Math.random() * (400 - 100 1) 100);
if(i % 2 == 0){ //the i % 2 is the remainder of i divided by 2, this make the condition alternate every iteration
tmpSprite.x = tmpX - tmpRand;
}else{
tmpSprite.x = tmpX tmpRand;
}
tmpX = tmpSprite.x;
tmpSprite.y = tmpY - (100 * i);
}
Этот код можно было бы еще больше сократить (меньше переменных, встроенные условные обозначения), но я хотел, чтобы его было как можно проще понять.