gpt4 book ai didi

ios - SKPhysicsContactDelegate 不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 09:02:32 25 4
gpt4 key购买 nike

我有以下代码:

在我的场景中:

static const uint32_t enermyCategory    =  0x1 << 0;
static const uint32_t fatherCategory = 0x1 << 1;

self.physicsWorld.contactDelegate = self;

//init ship
Ship *ship = [Ship getFather];
ship.position = CGPointMake(CGRectGetMaxX(self.frame) - ship.frame.size.width , ship.frame.size.height);
[self addChild: ship];

//init enermy
Enermy *ene = [[Enermy alloc] initWithImageNamed:enermyName gameScene:self];
ene.position = ship.position;
[self addChild:ene];

#pragma mark - Physics Delegate Methods
- (void)didBeginContact:(SKPhysicsContact *)contact{
NSLog(@"contact detected");
}

如您所见,我将飞船和能量设置在同一位置开始,因此它们总是会发生碰撞。

对于两个类,我在它们的初始化方法中有以下代码:

//setup physics body
self.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:self.size];
self.physicsBody.dynamic = NO;
self.physicsBody.categoryBitMask = enermyCategory; #shipCategory for ship
self.physicsBody.collisionBitMask = 0;
self.physicsBody.contactTestBitMask = shipCategory; #enermyCategory for ship

我发现 NSLog 永远不会被调用,因此物理碰撞检测永远不会起作用,我从苹果开发者教程中读了很多,它们看起来都一样有,不知道为什么不工作。 我可以看到屏幕上的飞船和能量图像相互碰撞

最佳答案

self.physicsBody.dynamic = NO;

静态(非动态)物体不会产生接触事件。让它们充满活力。

此外,我看到您正在将 gameScene 传递给 Enemy 的一个实例。如果 Enemy 对游戏场景(ivar)有很强的引用,那么您可能会在这里创建一个保留循环(敌人保留场景,场景保留敌人)。

在 Sprite Kit 中,您可以简单地使用 self.scene 访问场景,如果您在初始化期间需要场景,请将该代码移至设置方法中并调用 [ene setup] 将其添加为子项以执行涉及场景的设置步骤后立即执行。

关于ios - SKPhysicsContactDelegate 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21195151/

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