Я работал в xCode над игрой в cocos2D, и у меня есть одна проблема, которую я не могу решить.
По сути, я использую SneakyButton, который представляет собой пользовательский класс, который захватывает события касания, поэтому вы можете использоватьфайл PNG или радиус круга, чтобы что-то сделать.В моем случае огонь пули.
Когда я запускаю проект на устройстве в режиме SD (масштаб 1x) для iOS (для сетчатки до iPhone 4) отображается все работает нормально.
Однако, когда я запускаю проект в режиме дисплея Retina (2-кратный масштаб) на устройстве ... Я устанавливаю масштаб 2X в делегате для приложения.PNG можно увидеть.Все работает отлично, за исключением касаний, которые не отображаются.
Я сузил его до этой части кода.
'
- (BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
if (active) return NO;
CGPoint location = [[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]];
location = [self convertToNodeSpace:location];
//Do a fast rect check before doing a circle hit check:
if(location.x < -radius || location.x > radius || location.y < -radius || location.y > radius){
return NO;
}else{
float dSq = location.x*location.x + location.y*location.y;
if(radiusSq > dSq){
active = YES;
if (!isHoldable && !isToggleable){
value = 1;
[self schedule: @selector(limiter:) interval:rateLimit];
}
if (isHoldable) value = 1;
if (isToggleable) value = !value;
return YES;
}
}
return NO;
}
'
- (void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
if (!active) return;
CGPoint location = [[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]];
location = [self convertToNodeSpace:location];
//Do a fast rect check before doing a circle hit check:
if(location.x < -radius || location.x > radius || location.y < -radius || location.y > radius){
return;
}else{
float dSq = location.x*location.x + location.y*location.y;
if(radiusSq > dSq){
if (isHoldable) value = 1;
}
else {
if (isHoldable) value = 0; active = NO;
}
}
}
'
- (void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
if (!active) return;
if (isHoldable) value = 0;
if (isHoldable||isToggleable) active = NO;
}
- (void)ccTouchCancelled:(UITouch *)touch withEvent:(UIEvent *)event
{
[self ccTouchEnded:touch withEvent:event];
}
@end
'
Я думаю, что моя проблема в радиусе части кода ... Кто-нибудь сталкивался с этим раньше, или у вас есть какие-либо идеи о том, какую часть этого кода мне нужно модифицировать, чтобы он работал?Это мой последний камень преткновения перед завершением этого 6-месячного проекта!Помогите!Спасибо заранее!