0

我目前正在尝试一些事情。我已经完成了本教程:https ://www.makegameswith.us/tutorials/getting-started-with-spritebuilder/ 但是我现在有点卡住了。我在 SpriteBuilder 中创建了一个 CCNode 并添加了 3 个图像。carbody.png 和 2 个 wheel.png。我制作了所有的物体physicsObjects。

在代码中,我尝试将它们与关节连接并移动它们。然而,车身移动,但车轮保持在原位。

#import "Car.h"

@implementation Skater{
CCNode *_wheel1;
CCNode *_wheel2;
CCNode *_carBody;
CCPhysicsJoint *_bodyWheelJoint1;
CCPhysicsJoint *_bodyWheelJoint2;


}
- (id)init {
    self = [super init];

if (self) {
    [_wheel1.physicsBody setCollisionGroup: _carBody];
    [_wheel2.physicsBody setCollisionGroup: _carBody;
    [_carBody.physicsBody setCollisionGroup: _carBody];

    _bodyWheelJoint1 = [CCPhysicsJoint connectedPivotJointWithBodyA:_wheel1.physicsBody bodyB: _carBody.physicsBody anchorA:_wheel1.anchorPointInPoints];
    _bodyWheelJoint2 = [CCPhysicsJoint connectedPivotJointWithBodyA:_wheel2.physicsBody bodyB: _carBody.physicsBody anchorA:_wheel2.anchorPointInPoints];


}
return self;
}

而在 Gameplay.m 中,我只这样做了:

-(void)didLoadFromCCB{
[_car runAction:
 [CCActionMoveTo actionWithDuration:10 position:CGPointMake(2000,_car.position.y)]];

}

车身动了,轮子不动了

我错过了什么?

编辑:我现在做了一些改变,但我的轮子仍然保持原位......

#import "Car.h"

@implementation Car{
CCNode *_wheel1;
CCNode *_wheel2;
CCNode *_carBody;
CCPhysicsJoint *_bodyWheelJoint1;
CCPhysicsJoint *_bodyWheelJoint2;
}
- (id)init {

    self = [super init];
if (self) {
    CCLOG(@"Car created");
    [_wheel1.physicsBody setCollisionGroup:_carBody];
    [_wheel2.physicsBody setCollisionGroup:_carBody];
    [_carBody.physicsBody setCollisionGroup:_carBody];

    _bodyWheelJoint1 = [CCPhysicsJoint connectedPivotJointWithBodyA:_wheel1.physicsBody bodyB:_carBody.physicsBody anchorA:_wheel1.anchorPointInPoints];
    _bodyWheelJoint2 = [CCPhysicsJoint connectedPivotJointWithBodyA:_wheel2.physicsBody bodyB:_carBody.physicsBody anchorA:_wheel2.anchorPointInPoints];

}
return self;
}
-(void)moveCar:(int)distance{
CCLOG(@"Car should move");
CGPoint launchDirection = ccp(1, 0);
CGPoint force = ccpMult(launchDirection, distance);
[self.physicsBody applyForce:force];
}
@end
4

1 回答 1

1

您只是错过了移动(和其他)动作绕过物理的观点。一旦一个节点有一个物理体,使用改变位置和旋转的 CCAction* 类是不行的,大多数其他的(即比例)也不会应用于物理体,但仍然可以安全地使用。

要移动物理对象,请对物理体施加冲量或力。

于 2014-03-18T09:44:22.357 回答