博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[译]Chipmunk教程 - 4定义球体body和shapes
阅读量:6713 次
发布时间:2019-06-25

本文共 2228 字,大约阅读时间需要 7 分钟。

Defining the ball's body and shapes

 

 

 

定义一个body,同样是一个简单的过程,虽然他需要一些物理方面的知识。Chipmunk 有一个非常方便的函数,cpBodyNew(mass, moment); 它包含了所有的初始化条件和body所包含的东西。通常情况下,剩下的我们需要的就是设置body的位置了。

所以,接下来的代码会定义一个球体的body,这是他的位置,并且把他添加到我们的space当中,把接下来的code放在setupChipmuck 方法的末尾:

// Create our ball's body with 100 mass  // and infinite moment    cpBody *ballBody = cpBodyNew(100.0, INFINITY);  // Set the initial position    ballBody->p = cpv(160, 250);  // Add the body to the space    cpSpaceAddBody(space, ballBody);

Next, we need to tell how the ball interacts with other objects by defining its shape and associated properties. This process is usually the most complex of all and sometimes requires some tuning along trial & error. Chipmunk provides you with 3 different functions to create shapes based on the type you desire:

接下来,我们需要告诉这个球体如何和其他的物体进行交互。我们要定义他的形状shape和相关的属性。这个过程通常来说,是一个非常复杂的,并且需要反复的试验。Chipmunk提供了三种不同的函数,根据不同的你需要的类型,创建形状。

  • cpCircleShapeNew(cpBody * body, cpFloat radius, cpVect offset)
  • cpSegmentShapeNew(cpBody * body, cpVect a, cpVect b, cpFloat radius)
  • cpPolyShapeNew(cpBody * body, int numVerts, cpVect * verts, cpVect offset)

 

这些函数中,变量的意思是:

  • body: the body associated with the shape you're creating
  • radius: the radius of the circle you're creating or the "width" of the line/segment
  • offset: where to place the shape relative to the body's center
  • a, b: the start/end points for segment shapes (it creates a line linking the two points)
  • numVerts, verts: for poly shapes you provide an array of the vertexes defining the shape (due to C constraints you need to pass numVerts which is the number of items/points on that array)

 

 

所以,现在我们已经有了一个关于如何创建形状,有了一个简单的概览了。剩下的我们需要做得是定义属性了,如果阅读下面的代码注释,也不需要太多的解释了:

 

// Create our shape associated with the ball's body    cpShape *ballShape = cpCircleShapeNew(ballBody, 20.0, cpvzero);  ballShape->e = 0.5; // Elasticity    ballShape->u = 0.8; // Friction    ballShape->data = ball; // Associate with out ball's UIImageView    ballShape->collision_type = 1; // Collisions are grouped by types  // Add the shape to out space    cpSpaceAddShape(space, ballShape);

你可以定义很多属性,查阅文档的话,你可以了解更多。现在,我们需要做的就是确定设置了数据和碰撞类型。你可能会放弃elasticty和friction,甚至于改变他们的值。

转载于:https://www.cnblogs.com/pengyingh/articles/2388461.html

你可能感兴趣的文章
《Web异步与实时交互——iframe AJAX WebSocket开发实战》—— 2.2 相关关键技术及工作原理...
查看>>
《Nmap渗透测试指南》—第1章1.5节Mac OS安
查看>>
重磅,企业实施大数据的路径
查看>>
linux之cp/scp命令+scp命令详解
查看>>
Spark 源码分析 -- BlockStore
查看>>
《C语言编程初学者指南》一1.7 创建并运行第一个C程序
查看>>
学习和使用 PHP 应该注意的10件事
查看>>
《Ember.js实战》——2.5 Ember.js对象模型
查看>>
《响应式Web图形设计》一第13章 响应Web设计中的图像
查看>>
shiro session 监听
查看>>
定时任务框架Quartz的新玩法
查看>>
段前缀的使用(0504)
查看>>
.NET Framework 源码
查看>>
开源大数据周刊-第6期
查看>>
centos上一键安装jdk、tomcat脚本
查看>>
排序算法 时间、空间复杂度
查看>>
flex容器主轴上的部分元素单独设置位置
查看>>
window10安装Ubuntu虚拟机踩坑系列
查看>>
JavaScript倒计时
查看>>
ArrayList源码分析
查看>>