gpt4 book ai didi

c - 我怎样才能将 SpaceManager cpShape 存储在类似数组的东西中?

转载 作者:太空宇宙 更新时间:2023-11-04 04:57:57 26 4
gpt4 key购买 nike

我正在尝试使用 Cocos2d 和 Chipmunk(通过 SpaceManager)创建一个柔软的球,使用一堆链接在一起然后用 Spring 连接到中央主体的矩形。

Something like these examples

但为了做到这一点,我想我需要在创建它们之后将所有 cpShape 存储在一个数组中,这样我就可以遍历数组以将它们与约束一起链接在一起。

但是,当我尝试将 cpShapes 放入数组中时,我收到一条错误消息,告诉我它是“不兼容的指针类型”。所以......我要么需要使用数组以外的东西(我试过一组,但也不起作用)或者我需要对形状做一些事情以使其兼容......但是什么?或者我需要另一种方法。

有什么想法吗?

这是到目前为止的代码,应该是相关的......

- (id) init
{

if ( (self = [super init]) ) {

SpaceManager * spaceMgr = [[SpaceManager alloc] init];
[spaceMgr addWindowContainmentWithFriction:1.0 elasticity:1.0 inset:cpv(5, 5)];

// This is a layer that draws all the chipmunk shapes
ChipmunkDrawingLayer *debug = [[ChipmunkDrawingLayer node] initWithSpace:spaceMgr.space];
[self addChild:debug];

int ballPeices = 10; // the number of peices I want my ball to be composed of
int ballRadius = 100;
float circum = M_PI * (ballRadius * 2);

float peiceSize = circum / ballPeices;
float angleIncrement = 360 / ballPeices;

CGPoint origin = ccp(240, 160);
float currentAngleIncrement = 0;

NSMutableArray *peiceArray = [NSMutableArray arrayWithCapacity:ballPeices];

for (int i = 0; i < ballPeices; i++) {

float angleIncrementInRadians = CC_DEGREES_TO_RADIANS(currentAngleIncrement);

float xp = origin.x + ballRadius * cos(angleIncrementInRadians);
float yp = origin.y + ballRadius * sin(angleIncrementInRadians);

// This is wrong, I need to figure out what's going on here.
float peiceRotation = atan2( origin.y - yp, origin.x - xp);

cpShape *currentPeice = [spaceMgr addRectAt:ccp(xp, yp) mass:1 width:peiceSize height:10 rotation:peiceRotation];

currentAngleIncrement += angleIncrement;

[peiceArray addObject:currentPeice]; //!! incompatible pointer type

}



spaceMgr.constantDt = 0.9/55.0;
spaceMgr.gravity = ccp(0,-980);
spaceMgr.damping = 1.0;

}

return self;

}

最佳答案

不兼容的指针类型很容易解释:)

[NSMutableArray addObject] 定义如下:

- (void)addObject:(id)anObject

那么 id 是什么?好问题!请记住,Objective-C 的核心仍然是 C。根据Objective-C Programming Guide

typedef struct objc_object {
Class isa;
} *id;

太好了,现在我们知道了 *idid 本身呢?这就是方法签名中引用的内容。为此,我们必须查看 objc.h

typedef id (*IMP)(id, SEL, ...);

显然,cpSpace* 不适合,因此如果您尝试使用该消息将它们放入 NSMutableArray 中,您将获得不兼容的指针类型。

关于c - 我怎样才能将 SpaceManager cpShape 存储在类似数组的东西中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3197026/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com