0

私は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;
  }

`

4

2 に答える 2

0

たとえば、UIScreen スケール プロパティに関するロジックは必要ないと思います。scale=1 のロジックは、Retina ディスプレイと非 Retina ディスプレイで同じように機能するはずです。

簡単な試行: scale > 1.0 を scale > 3.0 に変更します (if は常に else 部分に分岐する必要があります。これは iPhone 3 で「動作する」と述べています)。これが正しいかどうかを確認するだけです。そうである場合は、スケールに関するロジックを完全に削除してクリーンアップします:) ...私のコードでは、スケールが1.0かそれ以外かを判断する正当なケースが1つもありませんでした。

于 2012-07-20T02:06:14.793 に答える
0

アプリのデリゲートでこれを行います

[director enableRetinaDisplay:YES];

画像が規則に従っていることを確認してください。
例えばiPhone3の場合、画像があると仮定するとimage.png
、網膜画像はimage-hd.png

于 2012-07-19T14:51:27.043 に答える