Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 1.0/2.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 22.01.2010, 01:27
CHLameR вне форума Посмотреть профиль Отправить личное сообщение для CHLameR Найти все сообщения от CHLameR
  № 1  
Ответить с цитированием
CHLameR

Регистрация: Jan 2010
Сообщений: 38
Question Объединение мувиклипов

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

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

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

Старый 22.01.2010, 07:47
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 2  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Принцип можно использовать, как здесь. На седьмой странице презентации.

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

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


Последний раз редактировалось Hauts; 22.01.2010 в 07:59.
Старый 22.01.2010, 08:00
NoCD вне форума Посмотреть профиль Отправить личное сообщение для NoCD Найти все сообщения от NoCD
  № 3  
Ответить с цитированием
NoCD
 
Аватар для NoCD

Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
Если делаете арканоид, то думаю лучший вариант здесь

Старый 23.01.2010, 19:47
CHLameR вне форума Посмотреть профиль Отправить личное сообщение для CHLameR Найти все сообщения от CHLameR
  № 4  
Ответить с цитированием
CHLameR

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

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

Код 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;
}


Последний раз редактировалось CHLameR; 23.01.2010 в 19:51.
Старый 23.01.2010, 19:58
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 5  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Вы в цикле проверяйте столкновение каждого записаного в массив блока с шариком. По такому коду, что вы привели, ничего не скажешь. Если у вас boxes — это массив, то код неправильный.
__________________
hauts.ru

Старый 24.01.2010, 17:25
CHLameR вне форума Посмотреть профиль Отправить личное сообщение для CHLameR Найти все сообщения от CHLameR
  № 6  
Ответить с цитированием
CHLameR

Регистрация: Jan 2010
Сообщений: 38
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;
		}}
Это код для коллизи блоков с шариком. Если шарик коснулся - блок удаляется. НО удаление блоков не работает. В чем моя ошибка?

Старый 24.01.2010, 17:51
Hauts вне форума Посмотреть профиль Отправить личное сообщение для Hauts Посетить домашнюю страницу Hauts Найти все сообщения от Hauts
  № 7  
Ответить с цитированием
Hauts
 
Аватар для Hauts

блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,112
Записей в блоге: 1
Отправить сообщение для Hauts с помощью ICQ Отправить сообщение для Hauts с помощью Skype™
Код AS1/AS2:
curB.swapDepths(curB._parent.getNextHighestDepth());
curB.removeMovieClip();
removeMovieClip работает для объектов с положительной глубиной.
__________________
hauts.ru

Старый 24.01.2010, 17:54
NoCD вне форума Посмотреть профиль Отправить личное сообщение для NoCD Найти все сообщения от NoCD
  № 8  
Ответить с цитированием
NoCD
 
Аватар для NoCD

Регистрация: Jan 2006
Адрес: Novosibirsk
Сообщений: 353
Если за пример взять тот код, что я привел в ссылке, то добавьте к оригиналу

Код 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};
 
	}
Это облегчит создание блоков. А картинку прикрепить, дело техники

Старый 24.01.2010, 18:05
CHLameR вне форума Посмотреть профиль Отправить личное сообщение для CHLameR Найти все сообщения от CHLameR
  № 9  
Ответить с цитированием
CHLameR

Регистрация: Jan 2010
Сообщений: 38
Добавил строку про глубину, все заработало, как должно было. Спасибо.

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

Создать новую тему Ответ Часовой пояс GMT +4, время: 00:37.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


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


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