簡體   English   中英

如何讓屏幕/相機在移動時跟隨 box2d 主體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM