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

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

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 04.04.2008, 13:52
sinya вне форума Посмотреть профиль Отправить личное сообщение для sinya Посетить домашнюю страницу sinya Найти все сообщения от sinya
  № 1  
Ответить с цитированием
sinya
 
Аватар для sinya

Регистрация: Apr 2003
Адрес: Ukraine, Kiev
Сообщений: 189
Отправить сообщение для sinya с помощью ICQ
По умолчанию Опять затык с хитТест

Всем привет.

Объясните, пожалуйста, что не так в моем случае. У меня есть мувик bgr, в нем мувик bgrr и aaa. Для aaa написана onEnterFrame ф-ция, которая опускает aaa вниз, пока он не коснется своим центром bgrr. Проблема в том, что при перемещении основного мувика bgr aaa смещается относительно bgrr. Точнее, когда центр aaa уже находится на bgrr, то при перемещении bgr хитТест центра aaa и bgrr иногда выдает false, из-за чего aaa перемещается еще на шаг ниже.
Короче, лучше глянуть: http://flashart.com.ua/1
потрясите мышкой красный круг.
Код:
function standBy() {	
	this.hit = false;
	if (bgr.bgrr.hitTest(this._x + bgr._x, this._y + bgr._y, true)==false) 
	this._y+=6; 
	trace (this._x);
}
bgr.aaa.onEnterFrame = standBy;
bgr.onMouseDown = function () {this.startDrag();}
исходник тут: http://flashart.com.ua/1/eq.fla

Как мне добиться, чтобы aaa, раз уткнувшись в bgrr, больше не смещалось относительно него при перемещении bgr?
__________________
Платон мне друг, но истина в вине.

Старый 04.04.2008, 14:43
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 2  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
>>чтобы aaa, раз уткнувшись в bgrr, больше не смещалось относительно него при перемещении bgr

не проверять больше ничего:
Код:
if (bgr.bgrr.hitTest(this._x + bgr._x, this._y + bgr._y, true)==false) {
	this._y+=6; 
}else{
	delete this.onEnterFrame;
}

Старый 04.04.2008, 14:55
sinya вне форума Посмотреть профиль Отправить личное сообщение для sinya Посетить домашнюю страницу sinya Найти все сообщения от sinya
  № 3  
Ответить с цитированием
sinya
 
Аватар для sinya

Регистрация: Apr 2003
Адрес: Ukraine, Kiev
Сообщений: 189
Отправить сообщение для sinya с помощью ICQ
Так нельзя, мне нужно проверять, т.к. bgrr может опуститься ниже, а aaa должно всегда находиться на поверхности bgrr.
__________________
Платон мне друг, но истина в вине.

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

Регистрация: Aug 2007
Адрес: Ukraine, Kyiv
Сообщений: 643
Отправить сообщение для olexandr с помощью ICQ Отправить сообщение для olexandr с помощью MSN Отправить сообщение для olexandr с помощью Skype™
не было особого желания вникать, но мне показалось, что не до конца продумана логика поведения - ошибка в ней...
но мне кажется, проще всего - убить onEnterFrame после соприкосновения, а после движения bgrr, можно опять же запустить onEnterFrame

Старый 04.04.2008, 16:38
sinya вне форума Посмотреть профиль Отправить личное сообщение для sinya Посетить домашнюю страницу sinya Найти все сообщения от sinya
  № 5  
Ответить с цитированием
sinya
 
Аватар для sinya

Регистрация: Apr 2003
Адрес: Ukraine, Kiev
Сообщений: 189
Отправить сообщение для sinya с помощью ICQ
Ааа, ошибка в логике поведения... Понятно...
__________________
Платон мне друг, но истина в вине.

Старый 04.04.2008, 17:28
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 6  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
Цитата:
Сообщение от sinya
Так нельзя, мне нужно проверять, т.к. bgrr может опуститься ниже, а aaa должно всегда находиться на поверхности bgrr.
все равно проверять-то уже ничего не надо: засеки где он находится относительно bgrr и двигай вместе с ним
Код:
if (bgr.bgrr.hitTest(this._x + bgr._x, this._y + bgr._y, true)==false) {
	this._y+=6; 
}else{
	this.dx=this._x-bgr.bgrr._x;
	this.dy=this._y-bgr.bgrr._y;
	this.onEnterFrame=function(){
		this._x=bgr.bgrr._x+this._dx;
		this._y=bgr.bgrr._y+this._dy;
	}
}

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

Регистрация: Apr 2003
Адрес: Ukraine, Kiev
Сообщений: 189
Отправить сообщение для sinya с помощью ICQ
Хочу прояснить ситуацию: мне не нужны обходные пути, меня интересует, как сделать, чтоб aaa не смещалась относительно bgrr при перемещении bgr.
Описанная выше ситуация сложилась во время программирования игры. Допустим, aaa - это один персонаж, а bgrr - другой. Так вот персонаж aaa сидит на персонаже bgrr. Если bgrr отойдет в сторону, мне не нужно, чтобы aaa ехал на нем. Мне нужно, чтобы он плавно опустился на освободившееся место.

И вообще, как объяснить то, что я описал выше? Очередная недоработка флэш?
__________________
Платон мне друг, но истина в вине.

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

блогер
Регистрация: Nov 2007
Адрес: Киев
Сообщений: 557
Записей в блоге: 2
Впринципе - вы неправильно понимаете, как работает startDrag(). Хотя это не ваша вина, наверное.
Попробуйте так:
Код:
function standBy() {	
	this.hit = false;
	if (bgr.bgrr.hitTest(this._x + bgr._x, this._y + bgr._y, true)==false) 
	this._y+=6; 
}
bgr.aaa.onEnterFrame = standBy;
bgr.onMouseDown = function () {this.drag=true;}
bgr.onMouseMove=function(){if(this.drag){this._x=_xmouse,this._y=_ymouse; updateAfterEvent()}}
Если хотите понять - почему так, обратите внимание на updateAfterEvent.

Старый 04.04.2008, 20:11
silin вне форума Посмотреть профиль Посетить домашнюю страницу silin Найти все сообщения от silin
  № 9  
Ответить с цитированием
silin
 
Аватар для silin

блогер
Регистрация: Mar 2003
Адрес: Моск. обл.
Сообщений: 5,269
Записей в блоге: 6
объяснить внятно трудно, скорее всего дело в том, что пересчет при драге не синхронизирован с enterFrame, поэтому мувик проскакивает в зону с хитТестом, а эта ситуация у тебя никак не обрабатывается..
учесть этот нюанс можно так, например:
Код:
function standBy() {	
	if(!bgr.bgrr.hitTest(this._x + bgr._x, this._y + bgr._y, true)){
		this._y+=6; 
	}else{
		while(bgr.bgrr.hitTest(this._x + bgr._x, this._y + bgr._y, true))this._y-=6;
		this._y+=6;
	}
}
bgr.aaa.onEnterFrame = standBy;
bgr.bgrr.onPress=startDrag;
bgr.bgrr.onRelease=stopDrag;

Старый 04.04.2008, 20:13
sinya вне форума Посмотреть профиль Отправить личное сообщение для sinya Посетить домашнюю страницу sinya Найти все сообщения от sinya
  № 10  
Ответить с цитированием
sinya
 
Аватар для sinya

Регистрация: Apr 2003
Адрес: Ukraine, Kiev
Сообщений: 189
Отправить сообщение для sinya с помощью ICQ
2crazyone: да startDrag тут не при чем, так происходит при любом перемещении bgr вверх-вниз.
__________________
Платон мне друг, но истина в вине.

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

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

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


 


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


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