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

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

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

Регистрация: Apr 2010
Сообщений: 6
По умолчанию hitTestObject проскакивает

Здравствуйте уважаемые флешеры
Что-то глючит у меня метод hitTestObject(), все работает, но почему-то глючит... а именно: может не сработать в первые три секунды после запуска приложения и автомобильчик мой проскочит сквозь стену, и при последующей работе тоже иногда не срабатывает, это случается очень редко, но все же хотелось бы устранить сей недостаток. Собственно кусок кода из моего творения:
Код AS3:
		private function gameRun(){
			Car.addEventListener(Event.ENTER_FRAME, drive); // Car это и есть автомобиль
			stage.addEventListener(KeyboardEvent.KEY_DOWN, addspeed);
			stage.addEventListener(KeyboardEvent.KEY_UP, keyflush);
		}
		private function addspeed(e:KeyboardEvent){
			if(e.keyCode == 38){
				run = 1;
			} else if(e.keyCode == 40){
				run = 2;
			}
		}
		private function keyflush(e:KeyboardEvent){
			if((e.keyCode == 38) || (e.keyCode == 40)){
				run = 0;
			}
		}
                //В коде ниже Car.car.bump и Car.car.bump2 передний и задний бампера
		private function drive(e:Event){
			if(run == 1){ // Если нажата клавиша "Вверх" то проверяется условие на столкновение переднего бампера
				if(Car.car.bump.hitTestObject(wall1) || Car.car.bump.hitTestObject(wall2) || Car.car.bump.hitTestObject(wall3) || Car.car.bump.hitTestObject(wall4)){
					speed = 0;
				} else {
					speed += (speed<maxspeed)?stepspeed:0;
				}
			} else if(run == 2){ // Если нажата клавиша "Вниз" то проверяется условие на столкновение заднего бампера
				if(Car.car.bump2.hitTestObject(wall1) || Car.car.bump2.hitTestObject(wall2) || Car.car.bump2.hitTestObject(wall3) || Car.car.bump2.hitTestObject(wall4)){
					speed = 0
				} else {
					speed -= (speed>-maxspeed)?stepspeed:0;
				}
			} else { // Иначе, если клавиши не нажаты, но скорость автомобиля еще не погашена, то проверяется условие на столкновение и переднего и заднего бампера
				if(Car.car.bump2.hitTestObject(wall1) || Car.car.bump2.hitTestObject(wall2) || Car.car.bump2.hitTestObject(wall3) || Car.car.bump2.hitTestObject(wall4)){
					speed = 0
				} else if(Car.car.bump.hitTestObject(wall1) || Car.car.bump.hitTestObject(wall2) || Car.car.bump.hitTestObject(wall3) || Car.car.bump.hitTestObject(wall4)){
					speed = 0;
				} else {
					speed +=(speed>0)?-stepspeed:(speed<0)?stepspeed:0;
				}
			}
                        //Ну а дальше, если написать грубо
                        Car.y+=speed;
		}
Я что-то делаю не так?

Старый 30.01.2011, 01:25
andrew911 вне форума Посмотреть профиль Отправить личное сообщение для andrew911 Найти все сообщения от andrew911
  № 2  
Ответить с цитированием
andrew911

Регистрация: Mar 2007
Сообщений: 545
Какая ширина у бампера и какая максимальная скорость автомобиля?
Если скорость > ширины бампера, то есть вероятность, что вы ее пролетите (в один момент бампер перед стеной, во второй за стеной - пересечения нет)

Старый 30.01.2011, 01:26
samana вне форума Посмотреть профиль Отправить личное сообщение для samana Найти все сообщения от samana
  № 3  
Ответить с цитированием
samana
 
Аватар для samana

блогер
Регистрация: Mar 2008
Адрес: Днепропетровск
Сообщений: 1,782
Записей в блоге: 3
Не знаю, может скорость бывает слишком большая и машина просто пролетает сквозь стены.
p.s. представляю код, когда у вас будет стен 20

Старый 30.01.2011, 06:20
Arbis вне форума Посмотреть профиль Отправить личное сообщение для Arbis Найти все сообщения от Arbis
  № 4  
Ответить с цитированием
Arbis

Регистрация: Apr 2010
Сообщений: 6
Хмм... а ведь точно, не подумал... толщина бампера 5, а максимальная скорость 10, спасибо
Уменьшил максимальную скорость и увеличил частоту кадров, проблема пропала, еще раз спасибо за помощь
Цитата:
p.s. представляю код, когда у вас будет стен 20
а еще круче, если 200
Этот феерический код с if(a||b) я просто написал для наглядности

Старый 30.01.2011, 11:51
f.g.programmer вне форума Посмотреть профиль Отправить личное сообщение для f.g.programmer Найти все сообщения от f.g.programmer
  № 5  
Ответить с цитированием
f.g.programmer
 
Аватар для f.g.programmer

блогер
Регистрация: Sep 2010
Адрес: Россия
Сообщений: 137
Записей в блоге: 3
Подстраивать скорость под толщину бампера не самое лучшее решение.
Возможно лучше проверять выход верхней точки переднего бампера за некоторую верхнюю границу, и, соответственно, нижней точки заднего за нижнюю границу.

Старый 31.01.2011, 15:33
Arbis вне форума Посмотреть профиль Отправить личное сообщение для Arbis Найти все сообщения от Arbis
  № 6  
Ответить с цитированием
Arbis

Регистрация: Apr 2010
Сообщений: 6
Цитата:
Возможно лучше проверять выход верхней точки переднего бампера за некоторую верхнюю границу, и, соответственно, нижней точки заднего за нижнюю границу.
При выходе за границы области "где можно ездить", это само собой, так и делаю.
А при определении столкновения с объектами, которые могут встретиться по ходу движения?

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

блогер
Регистрация: Dec 2008
Адрес: г. Чебоксары
Сообщений: 2,255
Записей в блоге: 6
Двигать машинку циклом с шагом в 1px.
__________________
Дети не должны знать о своих родителях

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

блогер
Регистрация: Jan 2008
Адрес: syktyvkar
Сообщений: 3,803
Записей в блоге: 10
Цитата:
Сообщение от Tails Посмотреть сообщение
Двигать машинку циклом с шагом в 1px.
И каждый шаг делать проверку? Накладненько по ресурсам будет.
__________________
тут я

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

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

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


 


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


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