كيف يمكنني اكتشاف ما إذا كان إجراء اللمس يلمس العفريت أم لا في حالة التكبير؟

StackOverflow https://stackoverflow.com/questions/3174123

  •  02-10-2019
  •  | 
  •  

سؤال

أولاً ، قمت بتوسيع نطاق الطبقة الأكبر التي تحتوي على العفاريت. الآن أحتاج إلى الشعور باللمس على العفريت. لقد حاولت على النحو التالي ، لكن لا أستطيع الوصول إلى الهدف-

CGRect tRect= [[aSprite displayedFrame] rect];
    if(CGRectContainsPoint(tRect, touchedPosition))
{
    NSLog(@"touched:>> touch at (%f,%f)",touchedPosition.x,touchedPosition.y);
    // Do something, maybe return kEventHandled;
}
else{
    NSLog(@"NOT touched: touch at (%f,%f)",touchedPosition.x,touchedPosition.y);
}

لمعلوماتك: لقد استخدمت إطار عمل COCOS2D

هل كانت مفيدة؟

المحلول 3

أخيرًا ، وجدت الحل :) ، إليك الرمز

CGPoint location = [touch locationInView: [touch view]];
CGPoint convertedLocation = [[CCDirector sharedDirector] convertToGL:location];

CGPoint tapPosition = [self convertToNodeSpace:convertedLocation];

حيث "الذات" هي طبقة حامل العفريت كما حددت من قبل. هذه الطبقة تستمع إلى حدث اللمس.

نصائح أخرى

أولاً ، تحتاج إلى التأكد من حصولك على الموقع من UITouch بشكل صحيح.

CGPoint location = [touch locationInView:[touch view]];
location = [[CCDirector sharedDirector] convertToGL:location];

ثانياً ، تحتاج إلى اختبار اللمس الخاص بك مقابل مربع العفريت المحيط.

if (CGRectContainsPoint([sprite boundingBox], location)) {
    // The sprite is being touched.
}

فرانك ميتشل صحيح. هناك طريقة أخرى تتمثل في إضافة رمز الاستماع الخاص بك إلى العفريت نفسه حتى يقوم Cocos بالعمل نيابة عنك. سوف يرسل فقط أحداث sprite cctouchesbegan إذا تم لمسها بالفعل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top