Nape Physics ShapeDebug, кажется, масштабируется
У меня странная проблема с простой демонстрацией затылка... вот мой код
package com.secretpackage {
import flash.display.Sprite;
import flash.events.Event;
import flash.text.TextField;
import nape.phys.Body;
import nape.shape.Circle;
import nape.space.Space;
import nape.util.ShapeDebug;
import nape.geom.Vec2;
import nape.phys.BodyType;
import nape.phys.Material;
public class Main extends Sprite {
// -------
private var world_db:Space=new Space(new Vec2(0,1000));
private var debug:ShapeDebug;
private var napeDebugSprite:Sprite = new Sprite();
private var sphere:Body;
private var labels:TextField;
// -------
public function Main():void
{
if (stage) init();
else addEventListener(Event.ADDED_TO_STAGE, init);
}
private function init(e:Event = null):void
{
removeEventListener(Event.ADDED_TO_STAGE, init);
// entry point
debug = new ShapeDebug(stage.stageWidth, stage.stageHeight, stage.color);
labels = new TextField();
var posX:int = stage.stageWidth/4;
var posY:int = stage.stageHeight/4;
var r:int = 10;
sphere= new Body(BodyType.KINEMATIC, new Vec2(posX, posY));
sphere.shapes.add(new Circle(r, new Vec2(posX, posY), Material.rubber()));
sphere.space = world_db;
labels.x = 0;
labels.y = 0;
addChild(labels);
var tc:test_circle = new test_circle();
addChild(tc);
tc.x = stage.stageWidth / 2;
tc.y = stage.stageHeight / 2;
addChild(napeDebugSprite);
debug.drawConstraints=true;
napeDebugSprite.addChild(debug.display);
addEventListener(Event.ENTER_FRAME, update);
}
private function update(e:Event):void {
world_db.step(1/stage.frameRate, 10, 10);
debug.clear();
debug.draw(world_db);
debug.flush();
labels.text = sphere.position.x + " - " + sphere.position.y +
"\n" + stage.stageWidth + " - " + stage.stageHeight +
"\n" + napeDebugSprite.width + " - " + napeDebugSprite.height +
"\n" + debug.display.width + " - " + debug.display.height;
}
}
}
Пожалуйста, обратите внимание:
- sphere is a Circle with radius=10 placed at StageWidth/4 and StageHeight/4;
- test_circle is a Movieclip of a circle with radius=10 placed at StageWidth/2 and StageHeight/2;
Когда я компилирую этот скрипт, я получаю... http://i.imgur.com/MAYF3j9.png?1 Два круга центрированы, а сфера имеет удвоенный радиус.
Я делаю что-то неправильно?
Спасибо.
2 ответа
Вы установили тело, чтобы иметь положение (stageWidth/4, stageHeight/4), затем вы добавили форму круга, локальное смещение которого также (stageWidth/4, stageHeight/4), поэтому, когда тело не повернуто, круг будет в конечном итоге в (stageWidth/2, stageHeight/2).
Что касается разницы в графическом размере, я могу только предположить, что ваша графика на самом деле не "радиус 10", а "ширина / высота 10", что составляет половину ширины / высоты радиуса 10 круга (ширина / высота которого равна 20).
Временным решением является масштабирование отладки:ShapeDebug, поэтому код становится...
....
addChild(napeDebugSprite);
debug.drawConstraints=true;
//Scaling
debug.display.scaleY = 0.5;
debug.display.scaleX = 0.5;
napeDebugSprite.addChild(debug.display);
....
Это решает проблему, но это просто обходной путь.