![]() |
|
||||||||||
|
|||||
|
Регистрация: Jul 2012
Сообщений: 48
|
Проблема в том, что когда player врезается в wall(Down, Left, Up, Right),то он не останавливается а продолжает проезжать, но как бы рывками, внизу вложен swf файл, подскажите что нужно изменить, что бы код заработал, Заранее благодарен.
import flash.display.MovieClip; import flash.events.Event; import flash.events.KeyboardEvent; import flash.ui.Keyboard; import flash.display.DisplayObject; import net.flashpunk.graphics.Text; var player:MovieClip; var playerSpeed:Number = 4; var movingUp:Boolean = false; var movingDown:Boolean = false; var movingLeft:Boolean = false; var movingRight:Boolean = false; stage.addEventListener(Event.ENTER_FRAME, enterFrameHandler); stage.addEventListener(KeyboardEvent.KEY_DOWN, myOnPress); stage.addEventListener(KeyboardEvent.KEY_UP, myOnRelease); this.addEventListener(Event.ENTER_FRAME, chekim); function enterFrameHandler(event:Event):void { if ( movingLeft && !movingRight ) { player.x -= playerSpeed; } if ( movingRight && !movingLeft ) { player.x += playerSpeed; } if ( movingUp && !movingDown ) { player.y -= playerSpeed; } if ( movingDown && !movingUp ) { player.y += playerSpeed; } } function myOnPress(event:KeyboardEvent):void { switch( event.keyCode ) { case Keyboard.UP: movingUp = true; movingDown = false; movingLeft = false; movingRight = false; break; case Keyboard.DOWN: movingUp = false; movingDown = true; movingLeft = false; movingRight = false; break; case Keyboard.LEFT: movingUp = false; movingDown = false; movingLeft = true; movingRight = false; break; case Keyboard.RIGHT: movingUp = false; movingDown = false; movingLeft = false; movingRight = true; break; } } function myOnRelease(event:KeyboardEvent):void { switch( event.keyCode ) { case Keyboard.UP: movingUp = false; break; case Keyboard.DOWN: movingDown = false; break; case Keyboard.LEFT: movingLeft = false; break; case Keyboard.RIGHT: movingRight = false; break; } } function chekim (e:Event):void { if (wallUp.hitTestObject(player as DisplayObject)) { movingUp = false; }else if (wallDown.hitTestObject(player as DisplayObject)){ movingDown = false; } else if (wallRight.hitTestObject(player as DisplayObject)){ movingRight = false; } else if (wallLeft.hitTestObject(player as DisplayObject)){ movingLeft = false; } } |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 48
|
Спасибо, помогло, но выявилась проблема другого характера, теперь квадрат останавливается только при некоторых стенах, и некоторые простно игнорит, хотя название у стен одинаковое wallLeft(чисто как пример), что тут может быть????
|
|
|||||
|
Регистрация: Jul 2012
Сообщений: 48
|
А можно пример, а то я не очень Вас понял. Как в данной ситуации это использовать?
|
|
|||||
|
блогер
Регистрация: Feb 2008
Адрес: Россия, Новосибирск, Академгородок
Сообщений: 2,113
Записей в блоге: 1
|
Берете положение и размеры вашего движущегося квадратика и с этими же свойствами отрисовываете кусочек карты под ним в битмапдату. Потом с помощью BitmapData.getColorBoundsRect проверяете, есть ли непрозрачные пиксели. В итоге, если есть (то есть квадратик наехал на стенку), вы получите Rectangle области пересечения, а значит будете знать, с какой стороны пересечение и насколько "глубоко".
Вот еще есть схожая тема: http://xitri.com/2008/09/29/simple-e...iew-part2.html
__________________
hauts.ru |
|
|||||
|
Регистрация: Jul 2012
Сообщений: 48
|
Цитата:
Добавлено через 38 часов 4 минуты Up Up |
![]() |
![]() |
Часовой пояс GMT +4, время: 20:17. |
|
|
« Предыдущая тема | Следующая тема » |
|
|