Просмотр полной версии : Объединение мувиклипов
Добрый вечер.
У меня довольно сложный вопрос. Постараюсь подробнее описать ситуацию.
В игре есть некоторое количество мувиклипов с анмиациями для блоков. Все они одного размера. Есть мувиклип для другого объекта - шарика.
Первый вопрос: как можно обойти написания кода коллизии шарика с блоками, его отталкивание, добавление за это очков и в исчезновение блока, для каждого мувиклипа в отдельности? То есть объединить как-то все мувиклипы блоков в один класс, наверное. И написать код коллизии шарика с классом "блок". Видимо как-то так.
Но на этом этапе возникает еще один вопрос - ведь если сделать код для столкновения шарика и класса "блок" и написать что блок должен исчезнуть, то пропадут все объекты этого класса, а не конкретный. Тут возможно следует применять id для каждого блока, но наверное есть способы проще?
Принцип можно использовать, как здесь (http://xitri.com/2009/12/31/uafpug2009-platform-engine-source.html). На седьмой странице презентации.
В блоке написано только вызывание функции, которая записывает его (это блок) в массив и, по необходимости, добавляет к блоку действия.
Но на этом этапе возникает еще один вопрос - ведь если сделать код для столкновения шарика и класса "блок" и написать что блок должен исчезнуть, то пропадут все объекты этого класса, а не конкретный. Тут возможно следует применять id для каждого блока, но наверное есть способы проще?
А вот это смотря, как напишите. Скорее пропадет экземпляр класса "блок" (и, соответственно, блок на экране), чем исчезнут все. id вам не нужен, вы и так можете хванить массив с сcылками на сами блоки.
Если делаете арканоид, то думаю лучший вариант здесь (http://www.emanueleferonato.com/2008/07/09/create-a-flash-game-like-deflection/#more-307)
Спасибо, посмотрел примеры, сделал массив с блоками и записал в него все мувиклипы блоков, но пока коллизию с шариком не сделал - что-то не то выходит.
Код коллизии, который работал для мувиклипа шарика и мувиклипа блока теперь не работает для мувиклипа шарика и массива всех блоков.
Делаю арканоид, да.
Массив блоков сделал как в презентации, мувиклипы блоков записал в массив. И написал такой код для коллизии шарика и массива блоков. Он работал когда был для столкновения двух мувиклипов а теперьн е работает.
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;
}
Вы в цикле проверяйте столкновение каждого записаного в массив блока с шариком. По такому коду, что вы привели, ничего не скажешь. Если у вас boxes — это массив, то код неправильный.
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;
}}
Это код для коллизи блоков с шариком. Если шарик коснулся - блок удаляется. НО удаление блоков не работает. В чем моя ошибка?
curB.swapDepths(curB._parent.getNextHighestDepth());
curB.removeMovieClip();
removeMovieClip работает для объектов с положительной глубиной.
Если за пример взять тот код, что я привел в ссылке, то добавьте к оригиналу
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};
}
Это облегчит создание блоков. А картинку прикрепить, дело техники
Добавил строку про глубину, все заработало, как должно было. Спасибо.
Тот код по ссылке я посмотрел, но не стал его использовать, так как уже написал код своего арканоида, многое уже было готово и я хотел только доделать, но не переделывать имеющийся код. Но пример очень любопытный, на будущее возьму на заметку себе. И видимо, для создания генерирующихся уровней мне нужно будет серьезно доработать мой код.
Работает на vBulletin ® версия 3.7.3. Copyright ©2000-2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Copyright © 1999-2008 Flasher.ru. All rights reserved.