Trước khi áp dụng phép ngoại suy cho chuyển động của sprite của tôi, va chạm của tôi đã hoạt động hoàn hảo. Tuy nhiên, sau khi áp dụng phép ngoại suy cho chuyển động của sprite của tôi (để giải quyết mọi thứ), sự va chạm không còn hoạt động nữa.
Đây là cách mọi thứ hoạt động trước khi ngoại suy:
Tuy nhiên, sau khi tôi thực hiện phép ngoại suy của mình, thói quen va chạm bị phá vỡ. Tôi giả sử điều này là do nó hoạt động theo tọa độ mới được tạo ra bởi thói quen ngoại suy (nằm trong lệnh gọi kết xuất của tôi).
Sau khi tôi áp dụng phép ngoại suy của mình
Làm thế nào để sửa hành vi này?
Tôi đã thử đặt thêm một kiểm tra va chạm ngay sau khi ngoại suy - điều này dường như làm sáng tỏ rất nhiều vấn đề nhưng tôi đã loại trừ điều này vì đưa logic vào kết xuất của tôi là điều không thể.
Tôi cũng đã thử tạo một bản sao của vị trí spitesX, ngoại suy nó và vẽ bằng cách sử dụng nó chứ không phải bản gốc, do đó để nguyên bản gốc cho logic để chọn - đây có vẻ là một lựa chọn tốt hơn, nhưng nó vẫn tạo ra một số hiệu ứng kỳ lạ khi va chạm với tường. Tôi khá chắc chắn rằng đây cũng không phải là cách chính xác để giải quyết vấn đề này.
Tôi đã tìm thấy một vài câu hỏi tương tự ở đây nhưng câu trả lời không giúp được tôi.
Đây là mã ngoại suy của tôi:
public void onDrawFrame(GL10 gl) {
//Set/Re-set loop back to 0 to start counting again
loops=0;
while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){
SceneManager.getInstance().getCurrentScene().updateLogic();
nextGameTick+=skipTicks;
timeCorrection += (1000d/ticksPerSecond) % 1;
nextGameTick+=timeCorrection;
timeCorrection %=1;
loops++;
tics++;
}
extrapolation = (float)(System.currentTimeMillis() + skipTicks - nextGameTick) / (float)skipTicks;
render(extrapolation);
}
Áp dụng phép ngoại suy
render(float extrapolation){
//This example shows extrapolation for X axis only. Y position (spriteScreenY is assumed to be valid)
extrapolatedPosX = spriteGridX+(SpriteXVelocity*dt)*extrapolation;
spriteScreenPosX = extrapolationPosX * screenWidth;
drawSprite(spriteScreenX, spriteScreenY);
}
Biên tập
Như tôi đã đề cập ở trên, tôi đã cố gắng tạo một bản sao tọa độ của sprite để vẽ với .... đây có vấn đề riêng.
Đầu tiên, bất kể việc sao chép là gì, khi sprite đang di chuyển, nó rất mượt mà, khi dừng lại, nó hơi lắc lư sang trái / phải - vì nó vẫn ngoại suy vị trí của nó dựa trên thời gian. Đây có phải là hành vi bình thường và chúng ta có thể 'tắt nó' khi sprite dừng lại không?
Tôi đã thử có cờ cho trái / phải và chỉ ngoại suy nếu một trong hai được bật. Tôi cũng đã thử sao chép vị trí cuối cùng và hiện tại để xem có sự khác biệt nào không. Tuy nhiên, theo như sự va chạm, những điều này không giúp được gì.
Nếu người dùng đang nhấn nói, nút bên phải và sprite đang di chuyển sang phải, khi nó chạm vào tường, nếu người dùng tiếp tục giữ nút bên phải xuống, sprite sẽ tiếp tục hoạt động ở bên phải, trong khi bị chặn bởi bức tường ( do đó không thực sự di chuyển), tuy nhiên vì cờ bên phải vẫn được đặt và cũng vì thói quen va chạm liên tục di chuyển sprite ra khỏi tường, nên nó vẫn xuất hiện mã (không phải trình phát) mà sprite vẫn đang di chuyển, và do đó ngoại suy tiếp tục. Vì vậy, những gì người chơi sẽ thấy, là 'tĩnh' (vâng, nó hoạt hình, nhưng nó không thực sự di chuyển trên màn hình), và cứ sau đó nó rung lắc dữ dội khi ngoại suy cố gắng thực hiện điều đó ..... .. Hy vọng điều này giúp đỡ