gpt4 book ai didi

iphone - 适用于 iPhone 的 cocos2d - 缩放后触摸不再正常工作

转载 作者:行者123 更新时间:2023-11-29 13:32:36 24 4
gpt4 key购买 nike

我对在 iPhone 上使用 Cocos2d 还比较陌生,我遇到了触摸位置问题。目前我只是想触摸并移动屏幕上的 Sprite ,当图层未移动时以及我平移图层时(在我的情况下在 X 方向上更改 self.position),这工作正常但是,当我缩放时我的层(例如:self.scale = .5)触摸不再移动 Sprite 。我做了很多论坛搜索/谷歌搜索,我认为我的问题与我的坐标变换(节点空间/世界空间等)有关,但我不是 100% 确定。我确实注意到,当我缩放时,如果我单击没有缩放的 Sprite 所在的位置,那么我可以移动 Sprite 。这让我相信我的转换没有考虑比例。

这是我目前用来获取触摸位置的坐标转换代码:

- (void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *myTouch = [touches anyObject];
CGPoint location = [myTouch locationInView:[myTouch view]];
location = [self convertToNodeSpace:location];
location = [[CCDirector sharedDirector] convertToGL:location];
}

这是检查位置(与上面相同的位置变量)是否接触 Sprite 的代码,尽管我对这段代码的正确性更有信心,谁知道呢!

for (CCSprite *sprite in movableSprites) {
if (CGRectContainsPoint(sprite.boundingBox, touchLocation)) {
NSLog(@"Woohoo, you touched a sprite!");
break;
}
}

如果您需要更多信息,请告诉我,感谢阅读!

最佳答案

我认为你应该用比例尺将边界框加倍

   for (CCSprite *sprite in movableSprites) {
if (CGRectContainsPoint(sprite.boundingBox*sprite.scale, touchLocation)) {
//touch sprite action
}
}

关于转换点,如果我需要一个绝对屏幕点我总是使用:

convertToWorldSpace:CGPointZero. 

我不太确定为什么你需要在触摸位置上这样做,当我需要忽略它们在父节点中的位置时,我通常会在 Sprite 上这样做。

除此之外,如果您的游戏不是真正的多点触控游戏,您最好使用 ccTouchBegan 而不是 ccTouchesBegan。

关于iphone - 适用于 iPhone 的 cocos2d - 缩放后触摸不再正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11496162/

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