Вот решил заняться созданием игр на ас3, сделал парочку платформеров - все нормально вышло, решил попробовать сделать змейку.
Главный герой (голова змеи), еда, появляющаяся на экране и меняющая положение при поедании созданы были легко, но возник вопрос - как сделать так, чтобы удлинялся хвост змеи?
Я написал вот такой код :
Код
var i = 0;
var food:Array = [];
addEventListener(Event.ENTER_FRAME, gg33);
function gg33 (e:Event):void{
if (geroj1.hitTestObject(eat.coll)){
eat.x = (Math.floor(Math.random()*(6)))*100+(50*( Math.floor(Math.random()*(2))));
eat.y = (Math.floor(Math.random()*(4)))*100+(50*( Math.floor(Math.random()*(2))));
var food2 = new geroj();
food2.x = g;
food2.y = c;
food.push(food2);
addChild(food[i]);
var food3 = setInterval(food4, 500);
function food4(){
food2.x = g;
food2.y = c;
}
i++;
}
}
Здесь g и c - раннее созданные переменные, которые каждые 500 миллисекунд считывают предыдущее положение головы змеи (geroj1) и присваивают это значение после соприкосновения с едой (также каждые 500 мс) вновь созданному объекту. По понятным причинам это работает лишь 1 раз, дальше змея не удлиняется.. подайте идею, как сделать увеличение змеи при каждом касании пищи?)
Добавлено (14.03.2014, 10:52)
---------------------------------------------
Решил проблему) Вместо числовых переменных g и с сделал 2 массива, в которые записываются все координаты х и у головы, а код, срабатывающий при поедании пищи переделал следующим образом :
Код
var t = 1;
var i = 0;
var food:Array = [];
addEventListener(Event.ENTER_FRAME, gg33);
function gg33 (e:Event):void{
if (geroj1.hitTestObject(eat.gg111)){
eat.x = (Math.floor(Math.random()*(6)))*100+(50*( Math.floor(Math.random()*(2))));
eat.y = (Math.floor(Math.random()*(4)))*100+(50*( Math.floor(Math.random()*(2))));
var food2 = new geroj();
var t1 = t;
food2.x = g[i1-t1];
food2.y = c[i1-t1];
food.push(food2);
addChild(food[i]);
var food3 = setInterval(food4, 500);
function food4(){
food2.x = g[i1-t1];
food2.y = c[i1-t1];
}
t++;
i++;
}
}