标签: chipmunk

Cocos2d + Box2d或Chipmunk

好吧,我试图制作我在这里制作的游戏的iphone版本http://scratch.mit.edu/projects/techy/781198更好的box2d或者花栗鼠,每个教程都有哪些教程

box2d chipmunk cocos2d-iphone

21
推荐指数
3
解决办法
2万
查看次数

Javascript物理引擎和模拟无限曲线

我正在尝试像javascript一样做一个小小的翅膀.

我第一次看到使用Box2D的技术,我正在使用closure-web版本(因为内存泄漏修复).
简而言之,我将曲线分解为多边形,因此它看起来像这样:

在此输入图像描述

我也试过过Chipmunk-js,我用段形来模拟我的地面:

在此输入图像描述

在这两种情况下,当圆形滚动时,我在多边形或线段之间的公共点处遇到一些"崩溃"或"颠簸".

我询问了Chipmunk,作者说他为段实现了radius属性以减少这种行为.我试过,它确实做了诀窍,但它并不完美.我仍然有一些颠簸(我必须设置为30px的半径才能获得正面效果).

"凸起"附加在两个多边形之间的共享点上:

撞虫

正如伊兰德里尔向我建议的那样使用边缘技术 (他只测试了多边形 - 多边形接触)以避免圆圈在边缘上崩溃:

斜边磨边技术

还试图像Luc建议的那样添加子弹选项,似乎没有任何改变.

这里是问题的演示.
您可以尝试更改要检查的值:

  • 子弹选项
  • 边缘尺寸
  • 迭代计数
  • 物理学

(仅在最新的开发Chrome上测试)
耐心(或改变水平重力),你会明白我的意思.
这里的感兴趣的回购.

javascript curve physics box2d chipmunk

21
推荐指数
1
解决办法
2145
查看次数

将NSValue转换回存储在其中的结构类型?

我通过对象和以下代码行存储Chipmunk Physics的cpShape对象:NSMutableDictionaryNSValue

NSValue *shapeValue = [[NSValue alloc] initWithBytes: shape objCType: @encode(cpShape)];
[staticBodiesInUse setObject: shapeValue forKey: name];
Run Code Online (Sandbox Code Playgroud)

我现在需要cpShape退出,将它与另一种形状进行比较.我怎样才能做到这一点?我看到一个getValue:方法,NSValue但它需要一个缓冲区,不太清楚如何处理它.

cocoa-touch objective-c chipmunk ios nsvalue

10
推荐指数
2
解决办法
5738
查看次数

CFFI依赖于某些功能

我正在使用CFFI 为Chipmunk2d(一个2D物理模拟库)编写一个关于Common Lisp的FFI .

当我评估REPL时:

> (cp:moment-for-circle 100 0 1 #(0 0))
(translate-into-foreign-memory 100 #<CL-CHIPMUNK-CFFI::CP-FLOAT-TYPE #x30200199A54D> #<A Foreign Pointer [stack-allocated] #xB136CD80>)
(translate-to-foreign 100.0D0 #<CL-CHIPMUNK-CFFI::CP-FLOAT-TYPE #x30200198793D>)
(translate-into-foreign-memory 0 #<CL-CHIPMUNK-CFFI::CP-FLOAT-TYPE #x30200199A50D> #<A Foreign Pointer [stack-allocated] #xB136CD40>)
(translate-to-foreign 0.0D0 #<CL-CHIPMUNK-CFFI::CP-FLOAT-TYPE #x30200198793D>)
(translate-into-foreign-memory 1 #<CL-CHIPMUNK-CFFI::CP-FLOAT-TYPE #x30200199A4CD> #<A Foreign Pointer [stack-allocated] #xB136CD00>)
(translate-to-foreign 1.0D0 #<CL-CHIPMUNK-CFFI::CP-FLOAT-TYPE #x30200198793D>)
(translate-into-foreign-memory #(0 0) #<VECT-TYPE CL-CHIPMUNK-CFFI::VECT> #<A Foreign Pointer [stack-allocated] #xB136CCC0>)
Run Code Online (Sandbox Code Playgroud)

打印输出来自我自己的翻译(见下文),但REPL永远不会返回.

我在Emacs 24.5,Mac OS X 10.10.5上使用Slime.没有任何印刷品*inferior-lisp*.

我尝试过CCL 1.11-r16635(DarwinX8664)和SBCL 1.2.0.当我在命令行上直接尝试sbcl时,行为是相同的.它挂了,没有调试器.

我究竟做错了什么?

我测试了其他功能,它们工作正常:

> (cp:circle-shape-new *static-body* 1 …
Run Code Online (Sandbox Code Playgroud)

common-lisp ffi chipmunk cffi

7
推荐指数
0
解决办法
182
查看次数

仅用于碰撞检测,是Chipmunk还是Box2d更好的工具?

对于基于Cocos2d的项目,我只想使用物理工具包进行碰撞检测.使用Chipmunk或Box2d有什么优缺点?

box2d chipmunk cocos2d-iphone ios

6
推荐指数
2
解决办法
5396
查看次数

在 Ruby 中与 Chipmunk 和 Gosu 一起绘制多边形

我是游戏开发的新手,我认为一起尝试 Gosu、Ruby 和 Chipmunk 会很有趣。到目前为止,我在二维自上而下的场地上有一个球员和一个球,并且它们发生了碰撞。我现在的问题是我希望我的玩家是一个正方形。
我高中时数学很糟糕,那是很多年前的事了。Chipmunk 的文档是这样描述绘制多边形的:

# Create a poly collision shape attached to the given body at
# the given offset with the given vertexes. _verts_ must be an
# Array of CP::Vect with a counterclockwise winding.
 def initialize(body, verts, offset); end
Run Code Online (Sandbox Code Playgroud)

我现在有这个代码来获取我的多边形:

verts = Array.new
verts.push(CP::Vec2.new(0,32))
verts.push(CP::Vec2.new(32,32))
verts.push(CP::Vec2.new(32,0))
verts.push(CP::Vec2.new(0,0))

@shape = CP::Shape::Poly.new(@body, verts, CP::Vec2.new(0,0))
Run Code Online (Sandbox Code Playgroud)

这最终给了我一个附加到我的方形 png 上的形状,但看起来好像 0,0 是图像的左上角,而实际的多边形甚至从图像的顶部左侧开始。

所以我认为我应该将“偏移”设置为多边形宽度的一半,但这并没有给我正确的结果。

我确信对于这里的大多数人来说这是基本的。但在游戏开发方面我还处于初级阶段。
有人可以向我解释一下吗?

编辑
是我截至 2011 年 5 月 28 日的完整代码

ruby chipmunk libgosu

5
推荐指数
1
解决办法
1938
查看次数

如何在海星中看到水?

有一个漂亮的海星iOS应用程序,在视频上可以看到漂亮的水效果.

我在这里找到了Tiny Wings"wave"教程,所以我想我可以弄清楚如何制作波浪.

我想知道当英雄从水中蹦出来时(喷溅和水变形)我该如何生效.另外我想知道当我从上方和下方观察水线时如何生效 - 请注意当英雄位于其上方及其下方时水线如何变化.

我熟悉Box2d和Cocos2d,所以我想知道这是否可以在这些知识范围内完成.我也想知道花栗鼠能不能提供帮助.

opengl-es box2d chipmunk cocos2d-iphone ios

5
推荐指数
1
解决办法
1565
查看次数

有关Racket和Chipmunk的FFI问题

我正在尝试使用它提供的FFI在Racket中使用Chipmunk物理库.但是,我目前在实际上让FFI找到Chipmunk库中的函数时遇到了问题,即使它似乎正确地加载了库.

我正在使用最新版本的基于Windows 8和Visual Studio 2008的Chipmunk(6.1.1).我设置了"CHIPMUNK_FFI"标志,以便加载chipmunk_ffi.h文件.我正在使用"Multi-Threaded DLL"和"Build as a dll"optoins正在使用的Release DLL配置下构建代码.我使用的Racket代码如下:

#lang scheme

(require ffi/unsafe
         ffi/unsafe/define)

(define chipmunk (ffi-lib "./chipmunk"))
(define-ffi-definer define-chipmunk chipmunk)

(define _cpFloat _double)
(define cpFloat? real?)
(define _cpDataPointer _pointer)
(define _size_t _ulong)
(define _cpHashValue _size_t)

(define-cstruct _cpVect
                ([x _cpFloat]
                 [y _cpFloat]))

(define cpv
  (get-ffi-obj "cpvadd" chipmunk (_fun _cpVect _cpVect -> _cpVect)))
Run Code Online (Sandbox Code Playgroud)

我收到错误:

ffi-obj: couldn't get "cpvadd" from "chipmunk.dll" (The specified procedure could not be found.; errno=127)

 === context ===
C:\Program Files (x86)\Racket\collects\ffi\unsafe.rkt:180:2: get-ffi-obj*
C:\Users\me.000\AppData\Roaming\Racket\planet\300\5.2.1\cache\jaymccarthy\chipmunk.plt\1\0\chipmunk-ffi-new.ss: [running body]
C:\Users\me.000\AppData\Roaming\Racket\planet\300\5.2.1\cache\jaymccarthy\chipmunk.plt\1\0\chipmunk-new.rkt: [traversing …
Run Code Online (Sandbox Code Playgroud)

ffi chipmunk racket

5
推荐指数
1
解决办法
386
查看次数

PocotJoints在Cocos2d V3(Chipmunk)中具有摩擦力和极限

我尝试将我用SpriteKit开始的游戏转换为Cocos2d V3.我有一些物理问题.我创造了一个像玩人一样的人.肢体通过SpriteKit中的PinJoints连接.我通过Chipmunk中的PivotJoints重新创建了这个基本功能.这按预期工作.

但我需要在关节上添加一些摩擦力.现在它们只是尽可能快地旋转,更重要的是我需要限制关节的旋转角度.可以想象,大多数人不能自由地将肩膀旋转360度.;)

AFAIK我应该使用ChipmunkRotaryLimitJoint和ChipmunkGearJoint来实现这一点.我的问题是,我不能使它工作,因为我不知道如何正确地附加它们.这是我现在的代码:

- (CCPhysicsJoint *)createPinJointWithBodyA:(CCPhysicsBody *)bodyA
                                      bodyB:(CCPhysicsBody *)bodyB
                                     anchor:(CGPoint)anchor
                                   friction:(CGFloat)friction
                                 lowerLimit:(CGFloat)lowerLimit
                                 upperLimit:(CGFloat)upperLimit
{

    CCPhysicsJoint *pin = [CCPhysicsJoint 
        connectedPivotJointWithBodyA:bodyA
                               bodyB:bodyB
                             anchorA:anchor];

    ChipmunkRotaryLimitJoint *limitJoint = [ChipmunkRotaryLimitJoint 
        rotaryLimitJointWithBodyA:bodyA.body 
                            bodyB:bodyB.body
                              min:CC_DEGREES_TO_RADIANS(lowerLimit)
                              max:CC_DEGREES_TO_RADIANS(upperLimit)];

    ChipmunkGearJoint *gearJoint = [ChipmunkGearJoint 
        gearJointWithBodyA:bodyA.body
                     bodyB:bodyB.body
                     phase:0.5
                     ratio:0.5];

    return pin;
}
Run Code Online (Sandbox Code Playgroud)

(gearJoint调用中的值只是占位符!)

有没有人知道这应该如何工作?我通过谷歌发现了一些东西,但所有教程都假设我在其他环境中使用了花栗鼠.我是否必须为这些限制和齿轮接头创建我自己的CCPhysicJoint实现?

谢谢,并祝福,托马斯

objective-c chipmunk cocos2d-iphone ios

5
推荐指数
1
解决办法
1702
查看次数

具有相同初始条件的混沌摆表现出混沌行为

我在 Stack Overflow 上发表的第一篇文章,请耐心等待。我使用 pymunk 物理库在 python 中构建了一个混沌双摆模型,该库又使用了chipmunk C 库。钟摆是混沌的,对初始条件表现出极大的敏感性。然而,我意识到,即使我使用完全相同的初始条件(无论如何更改零代码)运行模拟,这两个模拟也会很快出现分歧。

我的代码中有一些东西每次运行时都有可能产生不同的结果。因为模拟是混乱的,所以运行之间任何不恒定的微小错误都可能导致巨大的变化。

可能是什么原因造成的?我不确定这是否是花栗鼠、pymunk、甚至 python 或我的操作系统/PC 中的小缺陷造成的。

编辑:

这是我的代码:

import pyglet
import pymunk
import pymunk.pyglet_util


def add_pendulum(space):
    static_body = pymunk.Body()
    static_body.position = 400, 400
    mass = 10
    inertia = pymunk.moment_for_box(mass, 5, 100)

    body1 = pymunk.Body(mass, inertia)
    body1.position = 350, 400
    l1 = pymunk.Poly(body1, [(50, 0), (-50, 0), (-50, 5), (50, 5)])
    l1.friction = 0.1
    l1.collision_type = 2
    pivot_joint = pymunk.PivotJoint(static_body, body1, (400, 400))
    space.add(body1, l1, pivot_joint)

    mass = 10
    inertia = pymunk.moment_for_box(mass, …
Run Code Online (Sandbox Code Playgroud)

python rounding-error chipmunk pymunk chaos

5
推荐指数
1
解决办法
507
查看次数