اذهب إلى المحتوى

السؤال

Recommended Posts

  • 0
نشر

أنت لا تقوم بتحديث موضع obstacleY بشكل صحيح في دالة detectCollision، حيث تقوم بالتحقق هل العائق قد اصطدم باللاعب عن طريق التحقق مما إن كان الفرق المطلق بين موضع الـ x للاعب وموضع الـ x للعائق أقل من مجموع نصف عرض اللاعب ونصف حجم العائق، ولكنك لا تأخذ في الاعتبار موضع الـ y للعائق.

فعند موضع الـ y للعائق أكبر من 1، تقوم بإعادة تعيين موضع العائق والتحقق من الاصطدام، لكن لا تقوم بتحديث موضع الـ y للعائق بشكل صحيح، بل فقط تقوم بتحديث موضع الـ x للعائق.

لذا، تحتاج إلى تحديث موضع الـ y للعائق بشكل صحيح عن طريق طرح سرعة اللعبة من موضع الـ y للعائق في كل مرة يتم فيها تنشيط المؤقت.

_timer = Timer.periodic(Duration(milliseconds: 50), (timer) {
  setState(() {
    obstacleY -= gameSpeed; // تحديث موضع الـ y للعائق
    if (obstacleY > 1) {
      if (detectCollision(playerX, 0.8, obstacleX, obstacleY)) {
        score++;
        gameSpeed *= 1.05;
      } else {
        lives--;
        if (lives <= 0) {
          timer.cancel();
          _showGameOverDialog();
        }
      }
      resetObstacle();
    }
  });
});

أيضًا تحتاج إلى تحديث دالة detectCollision لتأخذ في الاعتبار موضع الـ y للعائق:

bool detectCollision(double playerX, double playerY, double obstacleX, double obstacleY) {
  double playerWidth = 0.15;
  double playerHeight = 0.05;
  double obstacleSize = 0.05;

  return (playerX - obstacleX).abs() < (playerWidth / 2 + obstacleSize / 2) &&
         (playerY - obstacleY).abs() < (playerHeight / 2 + obstacleSize / 2);
}

ومن المفترض الآن أن تنخفض القلوب عندما يصطدم العائق باللاعب.

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...