Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   Объединение мувиклипов (http://www.flasher.ru/forum/showthread.php?t=135387)

CHLameR 22.01.2010 01:27

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

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

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

Hauts 22.01.2010 07:47

Принцип можно использовать, как здесь. На седьмой странице презентации.

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

Цитата:

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

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

NoCD 22.01.2010 08:00

Если делаете арканоид, то думаю лучший вариант здесь

CHLameR 23.01.2010 19:47

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

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

Код AS1/AS2:

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 - массив в который записываются блоки.
Код AS1/AS2:

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

Код AS1/AS2:

curB.swapDepths(curB._parent.getNextHighestDepth());
curB.removeMovieClip();

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

NoCD 24.01.2010 17:54

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

Код AS1/AS2:

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

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

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


Часовой пояс GMT +4, время: 15:38.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.