chipmunk自带例子的翻译和解释(Simple)

最近学习这个物理引擎,资料超级难找只好死啃demo。我准备把他们全部翻译出来希望方便自己和大家学习。第一次翻译鸟语。不足之处希望大家多包含~~

Simple.c

#include <stdlib.h>

#include <stdio.h>

#include <math.h>

#include "chipmunk.h"

#include "drawSpace.h"

#include "ChipmunkDemo.h"

cpSpace *space;

cpBody *staticBody;

//Init函数用来初始化本程序

static cpSpace *

init(void)

{

//创建一个无限重量的刚体来装其他所有形状对象

//我们并不需要将这个刚体添加进虚拟空间,因为我们不需要它去模拟任何动作

//我们只希望静态刚体能够永远呆在他们原来的地方就好

staticBody = cpBodyNew(INFINITY, INFINITY);

//创建一个空间,它模拟了一个虚拟的世界,在世界里模拟刚体的运动,处理它们之间的碰撞,并模拟它们之间的接缝.

space = cpSpaceNew();

//现在来设置一些space的属性

//更多的迭代器会让仿真更准确,但运行速度会更慢.

space->terations = 10;

//下面两个属性影响着碰撞检测效率

cpSpaceResizeStaticHash(space, 30.0f, 1000);

cpSpaceResizeActiveHash(space, 30.0f, 1000);

//给这个空间设置一个重力

space->gravity = cpv(0, -100);

//创建一个沿着屏幕底边的形状(边界)

cpShape *ground = cpSegmentShapeNew(staticBody, cpv(-320,-240), cpv(320,-240), 0.0f);

//给这个形状设置一些属性

ground->e = 1.0f;   //弹性系数

ground->u = 1.0f;   //摩擦系数

ground->layers = NOT_GRABABLE_MASK; //设置位掩码(暂时不明白这个属性的用意)

//将这个形状作为一个静态形状添加到虚拟空间中

//如果一个形状你决定将来不改变它的位置,那么将他作为一个静态的形状添加到空间中,Chipmunk物理引擎便知道

//只需要在添加进空间时计算一次它的碰撞信息

//作为静态形状添加进空间后请不要再改变它的位置

cpSpaceAddStaticShape(space, ground);

//添加一个运动的圆形对象

cpFloat radius = 15.0f; //半径

cpFloat mass = 10.0f; //质量

// 我们需要在这个圆形创建时给它设置一个质量和惯性

cpBody *ballBody = cpBodyNew(mass, cpMomentForCircle(mass, 0.0f, radius, cpvzero));

// 给它设置一些属性

ballBody->p = cpv(0, -240 + radius+5);//位置

//添加这个刚体到虚拟空间,它会模拟现实中的运动

cpSpaceAddBody(space, ballBody);

//添加一个圆形的球,

//其实形状相当于是附着在刚体上的一个隐形的东西

//当刚体移动活旋转时,对应的形状也会和它一起运行

//另外,所有类似cpSpaceAdd*()这样的函数都会返回当前添加进对应空间的形状,所以你可以在同一行创建和添加.

//目前支持3种碰撞图形,圆形,线段,凸多边形,我会另外写一篇文章专门介绍这3个图形的创建

cpShape *ballShape = cpSpaceAddShape(space, cpCircleShapeNew(ballBody, radius, cpvzero));

ballShape->e = 0.0f;

ballShape->u = 0.9f;

return space;

}

// Update 函数每一帧都会被调用

static void

update(int ticks)

{

cpSpaceStep(space, 1.0f/60.0f);//设置空间的刷新率

}

//destroy函数用来销毁创建的所有对象

static void

destroy(void)

{

cpBodyFree(staticBody);

cpSpaceFreeChildren(space);

cpSpaceFree(space);

}

const chipmunkDemo Simple = {

"Simple",

NULL,

init,

update,

destroy,

};

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值