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

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

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

Регистрация: Dec 2007
Сообщений: 26
По умолчанию Прыгающий мяч

Привет!
Мне нужно сделать что бы шарик при соприкосновении с поверхностью, отскакивал от нее. Т.е. один мувик отлитал от другого при соприкосновении.


Чес скажу, на форме рылся долго. Понял что надо юзать hitTest. Но как его использовать, не понял.


Помогите пожалуйста.
Спасибо!

Старый 29.05.2008, 11:25
iNils вне форума Посмотреть профиль Отправить личное сообщение для iNils Посетить домашнюю страницу iNils Найти все сообщения от iNils
  № 2  
Ответить с цитированием
iNils
Негуру
 
Аватар для iNils

администратор
Регистрация: Jan 2000
Адрес: Кёнигсберг in Moscow
Сообщений: 21,884
Записей в блоге: 7
Для плоской поверхности достаточно определять координаты мяча и корректировать их.
__________________
(и)Нильс.ru | Плагины для FlashDevelop

Старый 29.05.2008, 11:56
StachelDraht вне форума Посмотреть профиль Отправить личное сообщение для StachelDraht Найти все сообщения от StachelDraht
  № 3  
Ответить с цитированием
StachelDraht

Регистрация: Dec 2007
Сообщений: 26
а если мне надо что бы шарик ударялся только от определенного куска поверхности. Незнаю как объяснить.
Короче на картинке, есть шарик (синий) и ящик (красный). Ящик двигается в лево и в право кнопками LEFT и RIGHT.
Короче игра где юзер пытается отбить мячик этим самым ящиком.
Как быть в таком случае.
Изображения
 

Старый 29.05.2008, 12:18
StachelDraht вне форума Посмотреть профиль Отправить личное сообщение для StachelDraht Найти все сообщения от StachelDraht
  № 4  
Ответить с цитированием
StachelDraht

Регистрация: Dec 2007
Сообщений: 26
никак не врубаюсь
Код:
ball.onEnterFrame = function() {
	if (ball._y != box._y){
		ball._y += 10;
	}else if
		(ball._y == box._y) {
		ball._y -= 10;
		}
	};

Старый 29.05.2008, 14:08
Alex_beginner вне форума Посмотреть профиль Отправить личное сообщение для Alex_beginner Найти все сообщения от Alex_beginner
  № 5  
Ответить с цитированием
Alex_beginner
 
Аватар для Alex_beginner

Регистрация: May 2008
Сообщений: 476
Чтобы определить, пересекаются ли два клипа, метод hitTest() необходимо задействовать в следующей форме:
clip1.hitTest(clip2),
здесь clip1 и clip2 — клипы, проверку коллизии которых нужно провести.
В качестве результата метод hitTest() возвращает булеву величину true, если клипы имеют общие точки, и false, если они не перекрываются.
В идеале факт пересечения двух клипов нужно считать состоявшимся, если у них есть хотя бы по одной заполненной точке, которые имеют одинаковые глобальные координаты. Увы, но проверить коллизию с такой точностью можно далеко не всегда. Для этого пришлось бы последовательно перебрать значительное число точек, что недопустимо с позиции времени выполнения кода. Поэтому метод hitTest() сравнивает не положения заполненных точек двух клипов, а лишь их граничные координаты (получить которые можно, используя метод getBounds()). Это означает, что факт коллизии будет подтвержден не тогда, когда объекты внутренней структуры двух клипов действительно перекрывают друг друга, а тогда, когда пересекаются области, ограниченные описанными вокруг них прямоугольными рамками.

В вашем коде проверяется лишь высота двух клипов (прмым сравнением свойства _y клипов). А как же быть если шарик будет падать не на площадку? Подумайте и используйте метод hitTest.


Последний раз редактировалось Alex_beginner; 29.05.2008 в 14:10.
Старый 29.05.2008, 14:57
lexa2000lexa вне форума Посмотреть профиль Отправить личное сообщение для lexa2000lexa Найти все сообщения от lexa2000lexa
  № 6  
Ответить с цитированием
lexa2000lexa

Регистрация: Sep 2005
Сообщений: 950
http://silin.fatal.ru/#AS/balls

Старый 29.05.2008, 15:34
StachelDraht вне форума Посмотреть профиль Отправить личное сообщение для StachelDraht Найти все сообщения от StachelDraht
  № 7  
Ответить с цитированием
StachelDraht

Регистрация: Dec 2007
Сообщений: 26
Огромное спасибо за объяснения и ссылку.
Буду думать дальше!

Старый 29.05.2008, 16:58
StachelDraht вне форума Посмотреть профиль Отправить личное сообщение для StachelDraht Найти все сообщения от StachelDraht
  № 8  
Ответить с цитированием
StachelDraht

Регистрация: Dec 2007
Сообщений: 26
пока что доперло.
Спасибо!
Код:
box.onEnterFrame = function() {
	if (Key.isDown(Key.LEFT)){
	this._x -= 25;
} else
	if(Key.isDown(Key.RIGHT)) {
	this._x += 25;
}
};

ball.onEnterFrame = function() {
	ball._y += 10;
};

function hit() {
	if (box.hitTest(ball)) {
		ball._y -=100;
	}
};
setInterval(this, "hit", 100);

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

Регистрация: May 2008
Сообщений: 476
Млин! Да че ж Вы все пишете на клипах. Это некрасиво и не читабельно. Делайте динамику на главной временной шкале.

Сделайте движение мяча в одном обработчике _root.onEnterFrame.
События нажатия клавиш onKeyDown сделайте тоже на главной временной шкале но не в onEnterFrame.

Код:
Key.addListener(_root);
_root.onKeyDown = function(code):Void
{
	trace(Key.getCode());
}

Старый 30.05.2008, 15:01
StachelDraht вне форума Посмотреть профиль Отправить личное сообщение для StachelDraht Найти все сообщения от StachelDraht
  № 10  
Ответить с цитированием
StachelDraht

Регистрация: Dec 2007
Сообщений: 26
Не работает.
Код:
Key.addListener(box);
_root.onKeyDown = function():Void
{
	if (Key.LEFT){
		box._x -= 25;
	} else 
	if (Key.RIGHT) {
		box._x += 25;
	}
};
и второй вопрос. Как заставить мяч отскакивать от поверхности в произвольную сторону по оси х.
И как сделать что бы не просто перепрыгивал на координату 150, а летел до нее.
Сейчас:
Код:
ball._y -= 150;

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

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

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


 


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


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