私は1つのユニバーサルパズルゲームを開発しています。このゲームでは、iphone4とiphone3に別々の画像を使用しましたが、iphone4の画像はiphone3の画像の2倍のサイズです。私の問題はiphone4の場合、iphone4画像の画像のタッチ領域が2倍のサイズになっています。たとえば、iphone4の画像サイズが20 * 40で、iphone3の画像サイズが10 * 20の場合、問題はiphone4画像のタッチ領域が40*80です。私のコードでどのように起こっているのかわかりませんが、この問題の解決策は得られませんでした。iphone3では、スプライトの長方形を使用して、タッチが正常に機能しています。
この問題を解決するのを手伝ってくれませんか、またはスプライト(画像)の長方形で接触するようにiphone4タッチ用にコーディングするのを忘れていることを教えてください
少し早いですがお礼を。これが私のコードです:
`-(void)ccTouchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
touchLocation = [touch locationInView: [touch view]];
touchLocation = [[CCDirector sharedDirector] convertToGL:touchLocation];
touchLocation = [self convertTouchToNodeSpace:touch];
NSLog(@"touch location x = %f , y =%f",touchLocation.x,touchLocation.y);
CCSprite * sp= [CCSprite spriteWithFile:@"1.png"];
sp.position = ccp(touchLocation.x ,touchLocation.y);
// [self addChild:sp z:100];
CGRect myrec = [invisible[0] boundingBox];
if (CGRectContainsPoint(myrec, touchLocation) ) {
NSLog(@"oneeeeeeee");
}
[self selectSpriteForTouch:touchLocation];
// return TRUE;
}
- (void)panForTranslation:(CGPoint)translation {
if (selSprite) {
CGPoint newPos = ccpAdd(selSprite.position, translation);
selSprite.position = newPos;
}
}
- (void)ccTouchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [touches anyObject];
Location = [touch locationInView: [touch view]];
Location = [[CCDirector sharedDirector] convertToGL:Location];
Location = [self convertTouchToNodeSpace:touch];
NSLog(@"touch moved location x = %f , y =%f",Location.x,Location.y);
//touchLocation = [self convertTouchToNodeSpace:touch];
CGPoint oldTouchLocation = [touch previousLocationInView:touch.view];
oldTouchLocation = [[CCDirector sharedDirector] convertToGL:oldTouchLocation];
oldTouchLocation = [self convertToNodeSpace:oldTouchLocation];
CGPoint translation = ccpSub(Location, oldTouchLocation);
if (CGRectContainsPoint(selspriterect,Location))
{
[self panForTranslation:translation];
}
if ([[UIScreen mainScreen] respondsToSelector:@selector(scale)])
{
NSLog(@"respond to selector");
CGFloat scale = [[UIScreen mainScreen] scale];
if (scale > 1.0)
{
NSLog(@"iphone 4s");
CGPoint mypoint = CGPointMake(80, 357);
CGPoint mypoint1 = CGPointMake(237, 360);
CGPoint mypoint2 = CGPointMake(79, 255);
CGPoint mypoint3 = CGPointMake(237, 247);
CGPoint mypoint4 = CGPointMake(78, 153);
CGPoint mypoint5 = CGPointMake(239, 140);
CCSprite *disablesprite=nil;
switch (selSprite.tag) {
case 0:
if (CGRectContainsPoint( [dest[0] boundingBox] , mypoint ) ) {
NSLog(@"oneeeeee collided");
dest[0].position = ccp(192,380);
// selSprite = disablesprite;
}
break;
case 1:
if (CGRectContainsPoint( [dest[1] boundingBox] , mypoint1 ) ) {
NSLog(@"two collided");
dest[1].position = ccp(258,379);
}
break;
case 2:
if (CGRectContainsPoint( [dest[2] boundingBox] , mypoint2 ) ) {
NSLog(@"three collided");
dest[2].position = ccp(173,281);
}
break;
case 3:
if (CGRectContainsPoint( [dest[3] boundingBox] , mypoint3 ) ) {
NSLog(@"four collided");
dest[3].position = ccp(258,281);
}
break;
case 4:
if (CGRectContainsPoint( [dest[4] boundingBox] , mypoint4 ) ) {
NSLog(@"five collided");
dest[4].position = ccp(166,181);
}
break;
case 5:
if (CGRectContainsPoint( [dest[5] boundingBox] , mypoint5 ) ) {
NSLog(@"six collided");
dest[5].position = ccp(258,176);
}
break;
default:
break;
}
}
else {
CGPoint mypoint = CGPointMake(106, 329);
CGPoint mypoint1 = CGPointMake(208, 329);
CGPoint mypoint2 = CGPointMake(97, 220);
CGPoint mypoint3 = CGPointMake(217, 220);
CGPoint mypoint4 = CGPointMake(92, 124);
CGPoint mypoint5 = CGPointMake(212, 124);
CCSprite *disablesprite=nil;
switch (selSprite.tag) {
case 0:
if (CGRectContainsPoint( [dest[0] boundingBox] , mypoint ) ) {
NSLog(@"oneeeeee collided");
dest[0].position = ccp(125,320);
// selSprite = disablesprite;
}
break;
case 1:
if (CGRectContainsPoint( [dest[1] boundingBox] , mypoint1 ) ) {
NSLog(@"two collided");
dest[1].position = ccp(200,312);
}
break;
case 2:
if (CGRectContainsPoint( [dest[2] boundingBox] , mypoint2 ) ) {
NSLog(@"three collided");
dest[2].position = ccp(117,209);
}
break;
case 3:
if (CGRectContainsPoint( [dest[3] boundingBox] , mypoint3 ) ) {
NSLog(@"four collided");
dest[3].position = ccp(200,208);
}
break;
case 4:
if (CGRectContainsPoint( [dest[4] boundingBox] , mypoint4 ) ) {
NSLog(@"five collided");
dest[4].position = ccp(113,127);
}
break;
case 5:
if (CGRectContainsPoint( [dest[5] boundingBox] , mypoint5 ) ) {
NSLog(@"six collided");
dest[5].position = ccp(207,126);
}
break;
default:
break;
}
}
}
}
-(void)ccTouchesEnded:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint mypoint = CGPointMake(106, 329);
CGPoint mypoint1 = CGPointMake(208, 329);
CGPoint mypoint2 = CGPointMake(97, 220);
CGPoint mypoint3 = CGPointMake(217, 220);
CGPoint mypoint4 = CGPointMake(92, 124);
CGPoint mypoint5 = CGPointMake(212, 124);
switch (selSprite.tag) {
case 0:
if (CGRectContainsPoint( [dest[0] boundingBox] , mypoint ) ) {
NSLog(@"oneeeeee collided");
if (corsprite == TRUE) {
correctplace++;
corsprite = FALSE;
}
}else {
selSprite.position = ccp(110,50);
}
break;
case 1:
if (CGRectContainsPoint( [dest[1] boundingBox] , mypoint1 ) ) {
NSLog(@"two collided");
if (corsprite2 == TRUE) {
correctplace++;
corsprite2 = FALSE;
}
}else {
selSprite.position = ccp(110, 65);
}
break;
case 2:
if (CGRectContainsPoint( [dest[2] boundingBox] , mypoint2 ) ) {
NSLog(@"three collided");
if (corsprite3 == TRUE) {
correctplace++;
corsprite3 = FALSE;
}
}else {
selSprite.position =ccp(130, 10);
}
break;
case 3:
if (CGRectContainsPoint( [dest[3] boundingBox] , mypoint3 ) ) {
NSLog(@"four collided");
if (corsprite4 == TRUE) {
correctplace++;
corsprite4 = FALSE;
}
}else {
selSprite.position = ccp(215, 10);
}
break;
case 4:
if (CGRectContainsPoint( [dest[4] boundingBox] , mypoint4 ) ) {
NSLog(@"five collided");
if (corsprite5 == TRUE) {
correctplace++;
corsprite5 = FALSE;
}
}else {
selSprite.position = ccp(220,70);
}
break;
case 5:
if (CGRectContainsPoint( [dest[5] boundingBox] , mypoint5 ) ) {
NSLog(@"six collided");
if (corsprite6 == TRUE) {
correctplace++;
corsprite6 = FALSE;
}
}else {
selSprite.position = ccp(220,70);
}
break;
default:
break;
}
`