Tôi hiện đang phát triển trò chơi cho Android và tôi muốn chuyên môn của bạn về một vấn đề mà tôi đang gặp phải.Phát triển trò chơi trên Android: Phát hiện va chạm Không
Bối cảnh:
trò chơi của tôi kết hợp tỷ lệ khung hình chuyển động độc lập, trong đó sẽ đưa vào chiếm giá trị thời gian đồng bằng trước khi thực hiện Velocity cần thiết tính toán.
Trò chơi là nền tảng 2D truyền thống.
Các Vấn đề:
Dưới đây là vấn đề của tôi (giản thể). Hãy giả vờ rằng nhân vật của tôi là một hình vuông đứng trên đỉnh của một nền tảng (với "lực hấp dẫn" là một vận tốc xuống liên tục của characterVelocityDown).
tôi đã xác định việc phát hiện va chạm như sau (giả sử Y điểm trục xuống):
Với characterFootY là y-phối hợp của các cơ sở của nhân vật vuông của tôi, platformSurfaceY là thượng y phối của nền tảng của tôi, và platformBaseY là thấp y phối hợp của nền tảng của tôi:
if (characterFootY + characterVelocityDown > platformSurfaceY && characterFootY + characterDy < platformBaseY) {
//Collision Is True
characterFootY = platformSurfaceY;
characterVelocityDown = 0;
} else{
characterVelocityDown = deltaTime * 6;
cách tiếp cận này làm việc p hoàn hảo khi trò chơi đang chạy ở tốc độ bình thường; Tuy nhiên, nếu trò chơi chậm lại, deltaTime (đó là thời gian trôi qua giữa khung trước và khung hiện hành) trở nên lớn, và characterFootY + characterVelocityDown vượt quá ranh giới xác định phát hiện va chạm và nhân vật chỉ rơi thẳng qua (như thể dịch chuyển).
Tôi nên tiếp cận vấn đề này như thế nào để ngăn chặn điều này?
Cảm ơn trước sự giúp đỡ của bạn và tôi mong muốn được học hỏi từ bạn!
Nếu bất kỳ ai khác gặp sự cố này, giải pháp có thể cho điều này là giới hạn giá trị deltaTime để khi giá trị vượt quá một giá trị nhất định, bạn chỉ cần đặt giá trị đó bằng giới hạn. Điều này sẽ làm cho gamepeed không nhất quán, nhưng sẽ ổn trong hầu hết các trường hợp. – SeveN
Bạn có cả giá trị trước và sau delta, khi so sánh có thể được thực hiện ở đó không? – cjk