|
|
|||||
Регистрация: Apr 2010
Сообщений: 6
|
hitTestObject проскакивает
Здравствуйте уважаемые флешеры
Что-то глючит у меня метод hitTestObject(), все работает, но почему-то глючит... а именно: может не сработать в первые три секунды после запуска приложения и автомобильчик мой проскочит сквозь стену, и при последующей работе тоже иногда не срабатывает, это случается очень редко, но все же хотелось бы устранить сей недостаток. Собственно кусок кода из моего творения: 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; } |
|
|||||
Регистрация: Mar 2007
Сообщений: 545
|
Какая ширина у бампера и какая максимальная скорость автомобиля?
Если скорость > ширины бампера, то есть вероятность, что вы ее пролетите (в один момент бампер перед стеной, во второй за стеной - пересечения нет) |
|
|||||
Регистрация: Apr 2010
Сообщений: 6
|
Хмм... а ведь точно, не подумал... толщина бампера 5, а максимальная скорость 10, спасибо
Уменьшил максимальную скорость и увеличил частоту кадров, проблема пропала, еще раз спасибо за помощь Цитата:
Этот феерический код с if(a||b) я просто написал для наглядности |
|
|||||
Подстраивать скорость под толщину бампера не самое лучшее решение.
Возможно лучше проверять выход верхней точки переднего бампера за некоторую верхнюю границу, и, соответственно, нижней точки заднего за нижнюю границу. |
|
|||||
Регистрация: Apr 2010
Сообщений: 6
|
Цитата:
А при определении столкновения с объектами, которые могут встретиться по ходу движения? |
Часовой пояс GMT +4, время: 23:32. |
|
« Предыдущая тема | Следующая тема » |
Опции темы | |
Опции просмотра | |
|
|