#actionscript-3
#actionscript-3
Вопрос:
Я пытаюсь заставить изображение автомобиля перемещаться вниз по экрану по оси y и сделать его повторным и столкнуться с другим объектом
//creates the new Car
for (var c:int=0; c<8; c ){
var newcar = new car();
newcar.x = 55*c;
newcar.y = 100;
EntityArray.push(newcar);
stage.addChild(newcar);
trace("Car Created" c)
}
Как заставить его совпадать со следующим и удалить его с экрана
//creates the new Frog
for (var f:int=0; f<1; f ){
var newfrog = new frog();
newfrog.x = 210;
newfrog.y = 498;
EntityArray.push(newfrog);
stage.addChild(newfrog);
trace("Frog Created" f)
}
[изображение][1][1]: https://i.stack.imgur.com/Ihsfx.png
Ответ №1:
Хотя мне очень приятно слышать, что сегодня вам все еще рассказывают об ActionScript в колледже, здесь немного сложно давать вам советы, поскольку я еще не знаю, что они рассмотрели. Вообще говоря, вы могли бы реализовать это с помощью простого игрового цикла, который выполняется периодически и в его наиболее простой форме:
- проверяет пользовательский ввод (в вашем случае, скорее всего, нажатие влево / вправо для перемещения лягушки)
- обновить состояние игры (переместить машины и лягушку; проверить на столкновение)
- нарисуйте все на экране
Для создания периодического цикла Flash / ActionScript предлагает мощное событие под названием ENTER_FRAME. После запуска он будет запускаться с частотой кадров фильма. Итак, если вы установите для своего фильма 60 кадров в секунду, он будет выполнять функцию обратного вызова примерно каждые 17 мс. Я предполагаю, что ваши экземпляры Frog и Car расширяют класс Flash Sprite или MovieClip, поэтому обнаружение столкновений также довольно простое, поскольку вы можете использовать унаследованный метод hitTestObject (). Однако, чтобы немного упростить задачу, я бы рекомендовал вам не помещать ссылку на экземпляр frog внутри EntityArray. Лучше использовать глобальную ссылку. (Кроме того, вам не нужен цикл for, потому что есть только одна лягушка)
В качестве другого примечания, довольно часто имена классов начинаются с заглавной буквы.
private var newfrog:frog; // defines a class variable we can access anywhere inside our class
//Later on instantiate new cars and the frog:
for (var c:int=0; c<8; c ){
var newcar = new car();
newcar.x = 55*c;
newcar.y = 100;
EntityArray.push(newcar);
stage.addChild(newcar);
}
newfrog = new frog();
newfrog.x = 210;
newfrog.y = 498;
stage.addChild(newfrog);
addEventListener(Event.ENTER_FRAME, loop); // register an ENTER_FRAME listener for the main game loop
private function loop(e:Event):void
{
var tempCar:car;
for(var a:int=0;a<EntityArray.length;a )
{
tempCar=EntityArray[a]; // get a car from the EntityArray
tempCar.y ; // move it down on screen
if(tempCar.y>600) // if it's vertical position is greater than 600...
{
tempCar.y=0; // ...move it back to the top
}
if(newfrog.hitTestObject(tempCar)) // evaluates to true, if a car and the frog's bounding boxes overlap
{
trace("there's a collision!"); // do something
}
}
}