PDA

Просмотр полной версии : Объединение мувиклипов


CHLameR
22.01.2010, 01:27
Добрый вечер.
У меня довольно сложный вопрос. Постараюсь подробнее описать ситуацию.
В игре есть некоторое количество мувиклипов с анмиациями для блоков. Все они одного размера. Есть мувиклип для другого объекта - шарика.

Первый вопрос: как можно обойти написания кода коллизии шарика с блоками, его отталкивание, добавление за это очков и в исчезновение блока, для каждого мувиклипа в отдельности? То есть объединить как-то все мувиклипы блоков в один класс, наверное. И написать код коллизии шарика с классом "блок". Видимо как-то так.

Но на этом этапе возникает еще один вопрос - ведь если сделать код для столкновения шарика и класса "блок" и написать что блок должен исчезнуть, то пропадут все объекты этого класса, а не конкретный. Тут возможно следует применять id для каждого блока, но наверное есть способы проще?

Hauts
22.01.2010, 07:47
Принцип можно использовать, как здесь (http://xitri.com/2009/12/31/uafpug2009-platform-engine-source.html). На седьмой странице презентации.

В блоке написано только вызывание функции, которая записывает его (это блок) в массив и, по необходимости, добавляет к блоку действия.


Но на этом этапе возникает еще один вопрос - ведь если сделать код для столкновения шарика и класса "блок" и написать что блок должен исчезнуть, то пропадут все объекты этого класса, а не конкретный. Тут возможно следует применять id для каждого блока, но наверное есть способы проще?

А вот это смотря, как напишите. Скорее пропадет экземпляр класса "блок" (и, соответственно, блок на экране), чем исчезнут все. id вам не нужен, вы и так можете хванить массив с сcылками на сами блоки.

NoCD
22.01.2010, 08:00
Если делаете арканоид, то думаю лучший вариант здесь (http://www.emanueleferonato.com/2008/07/09/create-a-flash-game-like-deflection/#more-307)

CHLameR
23.01.2010, 19:47
Спасибо, посмотрел примеры, сделал массив с блоками и записал в него все мувиклипы блоков, но пока коллизию с шариком не сделал - что-то не то выходит.
Код коллизии, который работал для мувиклипа шарика и мувиклипа блока теперь не работает для мувиклипа шарика и массива всех блоков.

Делаю арканоид, да.
Массив блоков сделал как в презентации, мувиклипы блоков записал в массив. И написал такой код для коллизии шарика и массива блоков. Он работал когда был для столкновения двух мувиклипов а теперьн е работает.

if (MCball._x > (boxes._x - 4.5) && MCball._x < (boxes._x + 32.5) && MCball._y > (boxes._y - 4.5) && MCball._y < (boxes._y + 20.5))
{
Ball_dy*=-1;
Ball_dx*=-1;
score += 10;
}

Hauts
23.01.2010, 19:58
Вы в цикле проверяйте столкновение каждого записаного в массив блока с шариком. По такому коду, что вы привели, ничего не скажешь. Если у вас boxes — это массив, то код неправильный.

CHLameR
24.01.2010, 17:25
boxes - массив в который записываются блоки.
var i = boxes.length;
while (i--) {
var curB = boxes[i];
if (curB.hitTest(MCball)) {
Ball_dy*=-1;
Ball_dx*=-1;
score += 10;
curB.removeMovieClip();
delete curB.onEnterFrame;
}}
Это код для коллизи блоков с шариком. Если шарик коснулся - блок удаляется. НО удаление блоков не работает. В чем моя ошибка?

Hauts
24.01.2010, 17:51
curB.swapDepths(curB._parent.getNextHighestDepth());
curB.removeMovieClip();


removeMovieClip работает для объектов с положительной глубиной.

NoCD
24.01.2010, 17:54
Если за пример взять тот код, что я привел в ссылке, то добавьте к оригиналу


function createline(x2,y2){
var Width = 60;
var Height = 20;
game.v[ins++] = {p0: {x: x2, y: y2}, p1: {x: x2 + Width, y: y2}, b: 1, f: 1};
game.v[ins++] = {p0: {x: x2 + Width, y: y2}, p1: {x: x2 + Width, y: y2+Height}, b: 1, f: 1};
game.v[ins++] = {p0: {x: x2 + Width, y: y2+Height}, p1: {x: x2, y: y2+Height}, b: 1, f: 1};
game.v[ins++] = {p0: {x: x2, y: y2+Height}, p1: {x: x2, y: y2}, b: 1, f: 1};

}


Это облегчит создание блоков. А картинку прикрепить, дело техники

CHLameR
24.01.2010, 18:05
Добавил строку про глубину, все заработало, как должно было. Спасибо.

Тот код по ссылке я посмотрел, но не стал его использовать, так как уже написал код своего арканоида, многое уже было готово и я хотел только доделать, но не переделывать имеющийся код. Но пример очень любопытный, на будущее возьму на заметку себе. И видимо, для создания генерирующихся уровней мне нужно будет серьезно доработать мой код.