嗨,我正在尝试在我的游戏中设置碰撞检测,我想添加碰撞检测,这样当气球击中钉子时,它们就会爆裂。我看过Ray Wenderliches的教程,但我不能理解它,因为它不适用于我的情况。有什么办法可以帮我解决这个问题吗?
尖峰在屏幕的顶部,气球在底部繁殖。
发布于 2014-03-31 16:09:29
设置两个对象之间的upp碰撞的基础是首先设置表示可能发生碰撞的不同对象的upp常量。我通常会创建一个constants.h文件,其中保存了在整个游戏/应用程序中使用的所有变量。
在constants.h文件中声明以下内容,或者仅将它们声明为类中的全局变量:
static const int balloonHitCategory = 1;
static const int spikeHitCategory = 2;你现在要做的是为你的气球和扣球建立物理模型。
SKSpriteNode *ballooon = [SKSpriteNode spriteNodeWithImageNamed:@"yourimagefilename"];
ballooon.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:yourSize];
ballooon.physicsBody.categoryBitMask = balloonHitCategory;
ballooon.physicsBody.contactTestBitMask = spikeHitCategory;
ballooon.physicsBody.collisionBitMask = spikeHitCategory;您应该为这两个spritenode设置大小和图像
SKSpriteNode *spikes = [SKSpriteNode spriteNodeWithImageNamed:@"yourimagefilename"];
spikes.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(yourSizeX, yourSizeY)];
spikes.physicsBody.categoryBitMask = spikeHitCategory;
spikes.physicsBody.contactTestBitMask = balloonHitCategory;
spikes.physicsBody.collisionBitMask = balloonHitCategory;对于碰撞,请设置以下方法:
-(void)didBeginContact:(SKPhysicsContact *)contact
{
SKPhysicsBody *firstBody, *secondBody;
firstBody = contact.bodyA;
secondBody = contact.bodyB;
if(firstBody.categoryBitMask == spikeHitCategory || secondBody.categoryBitMask == spikeHitCategory)
{
NSLog(@"balloon hit the spikes");
//setup your methods and other things here
}
}在碰撞生效之前,您还应该添加。在场景.h文件中添加。
@interface myScene : SKScene <SKPhysicsContactDelegate>
@end并在.m文件的初始化函数中添加:
-(id)initWithSize:(CGSize)size {
if (self = [super initWithSize:size]) {
self.physicsWorld.contactDelegate = self;
}
return self;
}有关冲突处理的更多信息,请查看苹果文档和冒险游戏示例:https://developer.apple.com/library/ios/documentation/GraphicsAnimation/Conceptual/CodeExplainedAdventure/HandlingCollisions/HandlingCollisions.html#//apple_ref/doc/uid/TP40013140-CH5-SW1
发布于 2014-04-23 00:59:40
我刚刚发布了一个用于Sprite Kit的插件2D碰撞引擎。它仍处于早期阶段,但可能会对您有所帮助:https://github.com/henryeverett/ToastCollisions2D
https://stackoverflow.com/questions/22495285
复制相似问题