iPhone SDK ، كيف تضع وظيفة الفراغ في منطقي ؟؟؟ من فضلك!

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

  •  22-09-2019
  •  | 
  •  

سؤال

أنا أستخدم مقياس التسارع الخاص بـ iPhone لإجراء تحرك كائن. أريد أن أكون قادرًا على جعل هذه الوظيفة تعمل وعدم العمل اعتمادًا على حالات مختلفة.

لديّ رمز لوظيفة التسارع الخاصة بي وأريد وضعه في منطق حتى أتمكن من الاتصال به عندما أحتاج إليها ، لكنني أواجه مشاكل. هل يمكن لأي شخص مساعدتي في وضع هذا الرمز في منطق اسمه:

-(BOOL) accelerometerWorks

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration{
valueX = acceleration.x*25.5;


int newX = (int)(ball.center.x +valueX);
if (newX > 320-BALL_RADIUS)
    newX = 320-BALL_RADIUS;
if (newX < 0+BALL_RADIUS)
    newX = 0+BALL_RADIUS;


int XA = (int)(balloonbit1.center.x +valueX);
if (XA > 320-BALL_RADIUS)
    XA = 320-BALL_RADIUS;
if (XA < 0+BALL_RADIUS)
    XA = 0+BALL_RADIUS;

int XB = (int)(balloonbit2.center.x +valueX);
if (XB > 320-BALL_RADIUS)
    XB = 320-BALL_RADIUS;
if (XB < 0+BALL_RADIUS)
    XB = 0+BALL_RADIUS;

int XE = (int)(balloonbit5.center.x +valueX);
if (XE > 320-BALL_RADIUS)
    XE = 320-BALL_RADIUS;
if (XE < 0+BALL_RADIUS)
    XE = 0+BALL_RADIUS;

int XF = (int)(balloonbit6.center.x +valueX);
if (XF > 320-BALL_RADIUS)
    XF = 320-BALL_RADIUS;
if (XF < 0+BALL_RADIUS)
    XF = 0+BALL_RADIUS;


int XH = (int)(balloonbit8.center.x +valueX);
if (XH > 320-BALL_RADIUS)
    XH = 320-BALL_RADIUS;
if (XH < 0+BALL_RADIUS)
    XH = 0+BALL_RADIUS;



ball.center = CGPointMake (newX, 415);
balloonbit1.center = CGPointMake (XA, 408);
balloonbit2.center = CGPointMake (XB, 395);
balloonbit5.center = CGPointMake (XE, 388);
balloonbit6.center = CGPointMake (XF, 413);
balloonbit8.center = CGPointMake (XH, 426);
}

الرجاء المساعدة. لقد كنت أحاول العصور دون أي نجاح. شكرًا. هاري.

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

المحلول

هذا هو أفضل تخميني حول ما تتبعه ، مع عدم وجود شيء للتحقق منه.

إذا كان كل ما تريد القيام به هو إعلان قيمة منطقية في الكود الخاص بك ، فضع

BOOL accelerometerWorks;

في ملف .H الخاص بك.

خلاف ذلك ، إذا كنت تريد وظيفة للتحقق من حالة اللعبة حسب الحاجة ، افعل شيئًا كهذا:

-(BOOL) accelerometerWorks{
    //check conditions, return YES or NO...
    return time == 0;
}

وهذا:

-(void) accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration   *)acceleration{
    if(![self accelerometerWorks]) return;
    valueX = acceleration.x*25.5;


    int newX = (int)(ball.center.x +valueX);
    if (newX > 320-BALL_RADIUS)
        newX = 320-BALL_RADIUS;
    if (newX < 0+BALL_RADIUS)
        newX = 0+BALL_RADIUS;
    //etc.
}

لا يمكنك العبث بإعلان مقياس التسارع: DeSaccelerate أو ستتوقف عن تلقي الرسائل ، ولكن يمكنك التحقق من وجود حالة غير صالحة بداخلها.

نصائح أخرى

هاري - قد ترغب أيضًا في صنع 320 ثابت ، كما فعلت مع BALL_RADIUS (سترغب في أن يكون هذا قادرًا على العمل على جهاز iPad ، أليس كذلك؟ ربما؟) وقد تفكر أيضًا في تحديد الكود الذي تكرره خمس مرات في طريقته الخاصة. يجب أن تفعل رمز Aehilrs بالضبط ما تريده لمقياس التسارع.

-(int) limitTravel:(position) {
  if (position > MAX_POSITION-BALL_RADIUS)
     return MAX_POSITION-BALL_RADIUS;
  if (position < BALL_RADIUS)
     return BALL_RADIUS;
}

إذا قررت تغيير كيفية عمل رمز الحد ، فستضطر فقط إلى تغييره في مكان واحد. لك CGPoint ستكون الأرقام السحرية أفضل مثل الثوابت أيضًا لنفس سبب 320.

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