| poliglot |
23.06.2012 00:39 |
Столкновения
Вложений: 1
Я делаю небольшую игру стрелялку. Возник вопрос по столкновениям.
Как их можно усовершенствовать? У меня получается, что ГГ "липнет боками" к тайлам к которым подходит и начинает медленно подниматься. И вообще постоянно "скачет".
Код AS3:
/Переменная all_obj находиться в object_base и имеет модификатор protected.
package main {
import flash.events.Event;
import flash.display.MovieClip;
public class Dynamic_object extends Object_base {
private var finder:Block = new Block(0);
private static var gravity:Number = 0.8;
private static var airFrict:Number = 0.9;
protected var flying:Boolean = false;
protected var speedY:Number = 0;
protected var speedX:Number = 0;
private var bX, bY;
public function Dynamic_object() {
// constructor code
}
public function move():void {
}
protected function secondMove():void {
//bX = x; bY = y;
speedY += gravity*airFrict;
speedX *= airFrict;
y += speedY;
x += speedX;
collision();
//trace(flying);
}
private function collision():void {
for each (var obj:Object_base in all_obj) {
if (hitTestObject(obj) && obj != this) {
flying = true;
y -= speedY;
speedY = 0;
if (String(obj) == String(finder) && (obj as Block).getID() == 3) {
trace((obj as Block).getID());
speedX += 2;
} else if (String(obj) == String(finder) && (obj as Block).getID() == 4) {
speedX *= 0.2;
}
//y = bY;
} else if (!hitTestObject(obj)) {
flying = true;
}
if (hitTestObject(obj) && obj != this) {
x -= speedX;
speedX = 0;
if (String(obj) == String(finder) && (obj as Block).getID() == 4) {
speedY += 1.2;
}
//x = bX;
}
}
}
}
}
|