![](/img/trans.png)
[英]The sprite doesn't follow the box2d body when the camera translate but works well if the camera is static in libgdx
[英]How to have the screen/camera follow a box2d body as it moves
我正在嘗試學習如何使用 box2d(很多代碼都是從傳奇人物 Dan Shiffman 那里偷來的),所以我創建了一個小“游戲”,其中一個球在 Perlin 噪聲地形中滾動。 我的代碼的一個明顯問題是球很快就會滾出屏幕。 我知道我將不得不改變我的地形生成,因為它不會隨着屏幕移動而繼續生成,但現在我想知道如何首先讓屏幕移動。 我想將圓圈 x 值保留在屏幕中央。
我發現了幾個類似的問題,答案是移動世界,但這對 box2d 來說似乎是個壞主意。 我還發現有人提到相機? 類,但我是初學者,不知道那是什么或如何使用它。
部分主要代碼:
void setup() {
size(1000,800);
smooth();
frameRate(30);
sw = new StopWatchTimer();
sw.start();
box2d = new Box2DProcessing(this);
box2d.createWorld();
p = new player(10,10,10);
surface = new Surface();
grav = -50;
box2d.setGravity(0, grav);
}
void draw() {
background(200);
//text(sw.second(),100,100);
box2d.step();
surface.display();
time();
keyTyped();
box2d.setGravity(0, grav);
p.display();
prePos = p.getPos();
}
播放器類中的一些代碼:
player(float x, float y, float r_) {
r = r_;
makeBody(x, y, r);
body.setUserData(this);
col = color(175);
}
public void makeBody(float x, float y, float r) {
BodyDef bd = new BodyDef();
bd.position = box2d.coordPixelsToWorld(x, y);
bd.type = BodyType.DYNAMIC;
body = box2d.createBody(bd);
cs = new CircleShape();
cs.m_radius = box2d.scalarPixelsToWorld(r);
fd = new FixtureDef();
fd.shape = cs;
fd.density = 5;
fd.friction = 1;
fd.restitution = .3;
body.createFixture(fd);
}
我很清楚這個問題真的問得不好,但我不確定需要哪些代碼,而且我不是一個善於表達的人,所以如果需要任何澄清或更多代碼來使這個問題可以理解,請不要猶豫對我大喊大叫它。
您可以使用translate()
命令。 您將使用玩家的坐標作為參數進行繪制。 我假設p.getPos()
返回一個 PVector。 如果是這種情況,則 draw 將如下所示:
void draw() {
pushMatrix()
translate(p.getPos().x+width/2,p.getPos().y+height/2); // <--Added Line
background(200);
//text(sw.second(),100,100);
box2d.step();
surface.display();
popMatrix()
time();
keyTyped();
box2d.setGravity(0, grav);
p.display();
prePos = p.getPos();
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.