生活在Box2D的世界

书名:代码本色:用编程模拟自然系统
作者:Daniel Shiffman
译者:周晗彬
ISBN:978-7-115-36947-5
目录

5.4 生活在Box2D的世界

1、World对象

  Box2D中World对象掌管着所有事物:它管理着模拟世界的坐标空间和所有物体,还能决定时间的推进。

  • 为了在Processing Sketch中使用Box2D,World对象应该是第一个被初始化的,因为它在程序中引入了Box2D,代表着整个模拟世界。
PBox2D box2d;
void setup() {
    box2d = new PBox2D(this);
    box2d.createWorld();   用默认设置初始化Box2D世界
}
  • createWorld()函数被调用后,
    PBox2D会为你设置一个默认的重力(方向向下),
    你也可以通过以下方式更改重力:
box2d.setGravity(0, -10);

  值得一提的是:重力不一定是固定的,方向也不一定向下;你可以在程序运行过程中调整重力向量,还可以取消重力,只需要将重力向量设为(0,0)即可。

2、坐标系统

  上面程序中的数字0和-10又代表什么?
  它在提醒我们:Box2D的坐标系统并不是之前的像素坐标系统!
  让我们来看看Box2D和Processing窗口的坐标系统有什么不同。


图5-2
  • 从上图可以看出,在Box2D中,(0,0)坐标位于正中间,y轴的正方向垂直向上。Box2D的坐标系统和笛卡儿坐标系一样。
  • 但Processing使用的是传统的计算机图形坐标系,在这种坐标系中,(0,0)坐标位于左上方,y轴的正方向向下。

  因此,如果要在Box2D中模拟物体受重力作用下落,我们必须用一个负的y坐标初始化重力向量。

Vec2 gravity = new Vec2(0, -10);

3、转换

  幸运的是,如果我们更倾向于用图形学的坐标系思考问题(作为Processing程序员,我们更喜欢这么做),那也没问题,因为PBox2D专门提供了一系列辅助函数用于实现像素空间和Box2D空间的相互转换。
  在学习下一节内容之前,让我们先看看这些辅助函数的调用方法。

4、 从“像素”转换为Box2D

  • 假如我们想告诉Box2D当前鼠标光标所在的位置,在Processing中鼠标光标所在的坐标是(mouse,mouseY)。
  • 我们需要将这个“坐标”(coordinate)从“像素”(pixel)坐标空间转换为Box2D“世界”(world)的坐标空间
    ——也就是调用coordPixelsToWorld()函数。
  • 用代码表示为:
Vec2 mouseWorld = box2d.coordPixelsToWorld(mouseX,mouseY); 
 将mouseX、mouseY转化成Box2D

5、 从Box2D转换为像素

  • 如果我们要将一个Box2D坐标转换为像素空间的坐标,又该怎么做?
Vec2 worldPos = new Vec2(-10, 25);   为了演示,我们编造一个Box2D坐标
Vec2 pixelPos = box2d.coordWorldToPixels(worldPos); 
将Box2D坐标转化为像素空间坐标,这一步ellipse(pixelPos.x, pixelPos.y, 16, 16);

6、PBox2D转换函数

  PBox2D提供了一系列函数用于两个坐标系的互相转换。通过实践能更好地学习这些函数,但我们可以先看看到底有哪些函数。


  除了以上函数,还有其他辅助函数能自动转换PVector对象。

  世界被初始化后,我们就准备把Box2D的各种物体放入其中。


©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350

推荐阅读更多精彩内容