Sprite'ımın hareketine ekstrapolasyon uygulamadan önce, çarpışmam mükemmel bir şekilde çalıştı. Ancak, sprite hareketime ekstrapolasyon uyguladıktan sonra (işleri düzeltmek için), çarpışma artık çalışmıyor.
Ekstrapolasyondan önce işler şu şekilde işler:
Ancak, benim ekstrapolasyonumu uyguladıktan sonra, çarpışma rutini kırılıyor. Bunun, dışkılama rutini (benim render çağrımda bulunan) tarafından üretilen yeni koordinat üzerinde hareket ettiği için varsayıyorum.
Ekstrapolasyonumu uyguladıktan sonra
Bu davranış nasıl düzeltilir?
Ekstrapolasyondan hemen sonra ekstra bir çarpışma kontrolü yapmayı denedim - bu birçok problemi ortadan kaldırıyor gibi görünüyor, ancak bunu dışladım çünkü renderımıza mantık koymak söz konusu değil.
Ben de spritesX pozisyonunun bir kopyasını yapmayı denedim, bunu tahmin edip orijinalden ziyade kullanarak çizim yaptım, böylece orijinali mantığın ele geçirmesi için sağlam bıraktım - bu daha iyi bir seçenek gibi görünüyor, ancak yine de bazı garip efektler üretiyor duvarlarla çarpışırken. Bunun da bununla başa çıkmanın doğru yolu olmadığından eminim.
Burada birkaç benzer soru buldum ama cevapları bana yardımcı olmadı.
Bu benim ekstrapolasyon kodum:
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);
}
Ekstrapolasyon uygulama
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);
}
Düzenle
Yukarıda bahsettiğim gibi, sprite koordinatlarının bir kopyasını özellikle çizmek için denedim .... Bu kendi problemleri var.
İlk olarak, kopyalamaya bakılmaksızın, hareketli grafik hareket ederken, süper yumuşaktır, durduğunda, biraz sola / sağa sallanıyor - hala zamana göre konumunu tahmin ediyor. Bu normal bir davranış mı ve hareketli grafik durduğunda 'kapatabilir miyiz?
Sol / sağ için bayraklara sahip olmayı denedim ve sadece bunlardan biri etkinse ekstrapolasyon. Ayrıca, herhangi bir fark olup olmadığını görmek için son ve mevcut konumları kopyalamayı denedim. Ancak, çarpışmaya gelince, bunlar yardımcı olmuyor.
Kullanıcı söyle tuşuna basarsa, sağ düğme ve hareketli grafik sağa doğru hareket ediyorsa, bir duvara çarptığında, kullanıcı sağ düğmeyi basılı tutmaya devam ederse hareketli hareketli duvar tarafından durdurulurken hareketli çizgi sağa doğru hareket edecektir ( bu yüzden aslında hareket etmiyor), ancak doğru bayrak hala ayarlandığından ve ayrıca çarpışma rutini hareketli grafiği duvardan sürekli hareket ettirdiği için, hareketli grafiğin hala hareket ettiği kodda (oyuncu değil) görünür ve bu nedenle ekstrapolasyon devam ediyor. Yani oyuncunun göreceği şey, hareketli 'statik' (evet, canlandırıyor, ama aslında ekran boyunca hareket etmiyor) ve her zaman ve sonra ekstrapolasyon bir şey yapmaya çalıştıkça şiddetle sallanıyor ..... .. Umarım bu yardım