![]() |
|
|
|||||
Регистрация: Mar 2016
Сообщений: 34
|
![]() Решил сделать платформер на flash, столкнулся с проблемой что hitTestPoint не работает. В чем может быть проблема?
Герой у меня создается с помощью графики “graphics”. P.S. Честно говоря не помню какая там проблема была, уже сталкивался с ней очень давно, сейчас позабыл. Вот пример hitTestPoint: if (platform1.hitTestPoint(shape.x, shape.y) && !jumpsetup) { shape.x = platform1.x; onground = true; jumping = false; var i = 0; var objy = Math.floor(y1); } var shape:Sprite = new Sprite(); var x1 = 0; var y1 = 0; var dx = 0; var dy = 0; var jumpsetup = false; var onground = false; var jumping = false; var shooting = false; var left_key_down: Boolean = false; var right_key_down: Boolean = false; var jump_key_down: Boolean = false; function createHero() { shape.graphics.lineStyle(1, 0x000000, 1); shape.graphics.beginFill(0x00FFFF, .5); shape.graphics.drawCircle(0, 0, 20); shape.x = 150; shape.y = 150; addChild(shape); } function init() { createHero(); stage.addEventListener(Event.ENTER_FRAME, onEnterFrame1); stage.addEventListener( KeyboardEvent.KEY_DOWN, on_keydown); stage.addEventListener( KeyboardEvent.KEY_UP, on_keyup); } function on_keydown( e : KeyboardEvent ) : void { //LEFT Key if (e.keyCode == 37) { left_key_down = true; } //RIGHT Key else if (e.keyCode == 39) { right_key_down = true; } //Up Key else if (e.keyCode == 38) { jump_key_down = true; } } function on_keyup( e : KeyboardEvent ) : void { //LEFT Key if (e.keyCode == 37) { left_key_down = false; } //RIGHT Key else if (e.keyCode == 39) { right_key_down = false; } //Up Key else if (e.keyCode == 38) { jump_key_down = false; } } function onEnterFrame1(evn:Event) { dy = dy + 0.5; var y1 = Math.ceil(shape.y + dy); onground = false; if (dy >= 0) { trace(shape.y); if (platform1.hitTestPoint(shape.x, shape.y) && !jumpsetup) { shape.x = platform1.x; onground = true; jumping = false; var i = 0; var objy = Math.floor(y1); } else { if (dy > 5 && !shooting) { } } } else { } if (dy > 9) { dy = 9; } if (!jumpsetup) { shape.x = shape.x + dx; shape.y = shape.y + dy; } if (right_key_down) { if (jumping) { dx = dx + 0.4; } else { dx = dx + 1; } } else { if (left_key_down && !shooting) { if (jumping) { dx = dx - 0.4; } else { dx = dx - 1; } } else { dx = dx * 0.7; } } if (dx > 7) { dx = 7; } if (dx < -7) { dx = -7; } if (!jumpsetup && !jumping && !shooting && onground) { if (Math.abs(dx) < 0.5) { dx = 0; } else { dy = -9; jumpsetup = false; } } if (jump_key_down && dy >= 0 && dy < 1 && !jumping) { trace("dawad2"); onground = false; shooting = false; jumping = true; jumpsetup = true; } shape.x = Math.floor(shape.x); shape.y = Math.floor(shape.y); } init(); |
|
|||||
Ваш код не запускал, но:
1. Я не вижу, где вы заполняете спрайт platform1 контентом, он у вас пустой? Тогда ясное дело, что результатом проверки любой точки будет отсутствие пересечения. И так ещё: 1. Вычисление условия в if происходит слева на право и прерывается, если результат условия уже известен до его полного вычисления. Для повышения производительности лучше простые проверки выполнять первыми (сделать сравнение с флагом: jumpsetup до вызова hitTestPoint) 2. Делать физику на простых хит тестах не очень удобно, был клёвый 2д физ. движок - Nape; 3. Не забываем читать доку по API, она даже на русском.
__________________
Дети не должны знать о своих родителях |
|
|||||
Регистрация: Mar 2016
Сообщений: 34
|
Спасибо за библиотеку Nape, буду изучать. У этой библиотеки закрытый исходный код, а то я на сайте обнаружил вместо .as формат .swc?
Хотелось бы посмотреть как библиотека работает изнутри (исходный код). |
![]() |
![]() |
Часовой пояс GMT +4, время: 16:35. |
|
« Предыдущая тема | Следующая тема » |
|
|