LibGDX içinde çok basit bir çarpışmanın uygulanmasında zorluk yaşıyorum. "Player" için güncelleme kodu olarak böyledir: YanilibGDX - Garip Çarpışma Davranışı
private void updatePosition(float _dt)
{
Vector2 _oldPos = _pos;
_pos.add(_mov.scl(_dt*50));
_bounds.setPosition(_pos.x-8, _pos.y-12);
if(_game.getMap().checkCollision(_bounds))
{
System.out.println("Collision Detected");
_pos = _oldPos;
_bounds.setPosition(_pos.x-8, _pos.y-12);
}
}
, başlangıçta herhangi bir hareketi uygulamadan önce pozisyon vektörü _pos değerleri olarak depolanır _oldPos.
Hareket ardından pozisyon vektörü, oyuncunun sınırlayıcı dörtgen _bounds sonra bu yeni konumuna güncellenir için (delta-time * 50 ile çarpılır) hareketi vektörü _mov eklenerek gerçekleştirilir.
Bundan sonra oyuncunun yeni sınırlayıcı Dikdörtgeni, oyunun "haritasındaki" her kiremitin karşısındaki kavşaklar için kontrol edilir, eğer bir kavşak algılanırsa, oyuncu bu yönde hareket edemez, böylece konumları önceki pozisyona ayarlanır _oldPos ve sınırlayıcı dikdörtgenin konumu da bir önceki konuma ayarlanır.
Maalesef bu işe yaramazsa, oyuncu bu resimde görüldüğü gibi, düz fayans yoluyla hareket edebildiğini:
Yani burada neler olduğunu? Bu kodun algılanan çarpışmayı çözmesi gerektiğini düşünerek düzeliyorum mu? Garip nedir
olduğunu oyuncusu hala katı bloklar arasında gezinti yapabilir
_pos.sub(_mov.scl(_dt*50));
verimler çok farklı sonuçlar, (tam tersinedir yapılan Aynı hareketi yapma) ile
_pos = _oldPos;
değiştirilmesi ama dirençle karşılaşır.
_oldPos == _pos.sub(_mov.scl(_dt*50));
Sorun buydu! Teşekkürler. Bir diğerine eşit riable, gerçek zamanlı "izler"? –
@W.H Evet, yeni bir nesneyi kullanmadan bir nesneyi eşit olarak ayarladığınızda, onu eşitlediğiniz nesne ile aynı belleğe işaret eder. Bu, her iki nesnenin de aynı verilere işaret ettiği anlamına gelir. – Wyatt