Merhaba, yine ben. :P Üç tane sorunum var. 1. sorun: Entity'lerin sprite'ları ekrana çizilirken her zaman listedeki ilk eleman kamera sağa sola kaydırıldıkça yamuluyor. NOT: 2. düzeldi.2: sorun: Her entity'nin çarpışma kontrolü yapan hitBox'ı var. Bu x, y, w, h şeklinde normal drtgen. Player platformun üzerinde yürürken tam üzerinde durması gerekirken her zaman biraz içine giriyor diğer hitBox'ın. Anlatamama ihtimalime karşı video çektim: https://www.youtube.com/watch?v=MFlk0qdkoz8nemli olan sorunum ikincisi. Bunun çarpışma kontrolü yaptıkan sonra velocity'leri ayarlarken yaptığım bir yanlışlıktan ortaya çıktığını düşünüyorum. 1. Çarpışma kontrolü yapılıyor.2. Eğer çarpışma yoksa yer çekimi uygulanıyor. 4. Eğer Entity başka biriyle temas halindeyse ve Y ekseni sıfırdan büyükse Y eksenindeki velocity sıfırlanıyor. Bunu Player'in platform üzerinde durabilmesi için yaptım, aksi halde sonsuza kadar düşüyor.3. Gravity ve uygulanan ekstra velocity Entity'ye uygulanıp yeni pozisyonu ayarlanıyor. Nesne kalıtımları şyle:Entity > DynamicEntity > AnimatedEntity > Character > PlayerPlatformlar şimdilik sadece Entity. Çalışma düzeni şyle:1. GameEngine::Update > EntityManager::Update2. EntityManager::Update > > Çarpışma Kontrolü > Entity::Update 3. Player::Update > Klavye Girdisini Al > Character::Update4. Character::Update >DynamicEntity::Update5. DynamicEntity::Update > 5.1 - Çarpışma varsa isOnGround = true; 5.2 - Eğer Entity yerde değilde yer çekimi uygula. (1px) 5.3 - Eğer Entity yerde ise ve velocity > 0 ise; velocity. y = 0 5.4 - DynamicEntity::CompleteMovement ; > 5.4.1 - Entity. x'e velocity. x'i ekle. 5.4.2 - velocity. x = 0 5.4.3 - Entity. y'ye velocity. y'yi ekle. 5.4.3 - velocity. y sıfırlama çünkü sadece yer çekimi tarafından etki edilebilir. 5.5 - AnimatedEntity::Update 5.5.1 - Animate ; 5.5.2 - Entity::Update ; Methodlar aşağıdaki gibi:Player::Update: http://paste.ubuntu.com/13365797/DynamicEntity::Update: http://paste.ubuntu.com/13365810/DynamicEntity::CompleteMovement: http://paste.ubuntu.com/13365817/Hahaha şaka gibi :DApplyVelocity isimli iki methodum vardı. Birisi Vector2 diğeri int, int parametreleri alıyordu. Birinde MAX_SPEED kontrolü yapıp diğerinde yapmamışım. Onu düzeltince sorun halloldu. Geçen başlıktaki gibi oldu. Soruyu silmiyorum belki birisi daha karşılaşır.3. sorun: Player ve Character nesneleri klavye girdisine ihtiyac duyuyor. Bu yüzden Update methodları alıyor. Ancak Platformlar için bu durum geçerli değil. Sadece gravity'yi almaları yeterli. Ama EntityManager içinde tüm Entity'lerin Update methoduna iki parametre gnderiliyor. Dolayısıyla hata veriyor. Bu sorunu aşmak için Entity içinde iki Update methodu tanımladım. Birisi parametreleri alıyor, diğeri almıyor. Parametre alan method EntityManager tarafından tetiklendiğinde onun içinde parametresiz method çağırılıyor. Bu geçici bir çzüm, nasıl daha yakışıklı bir çzüm getirilebilir?bonus: Debug için gdb kullanmak istiyorum. Şyle yapıyorum;1 - gdb bin/binary2 - runAncak bana gcc'nin verdiğinden farklı bir sonuç getirmiyor. İnternetten okuduğum kadarıyla başka birşey gerekmiyor. Yani eğer aynı şeyleri syleyecekse bana, insanlar neden kullanıyor ki? Birşeyleri yanlış yapıyorum sanırım..

İlk sorun: https://en. wikipedia. org/wiki/Screen_tearing İkinci sorun: Yükseklik vs. ekranın neresinden hesaplanıyor? Ağırlık merkezi ile hesaplaman kolaylık sağlar. Bu yolla x1, y1 > y1 + h / 2 ; x1 + w / 2 ekrandaki koordinatlar olabilir. Belki de burada ufak bir kod hatası vardır:) Üçüncü sorun: İşte player farklı bir şey. Player diye bir nesnem olacaksa, kullanıcının girdilerini kontrol etmeli hatta ayrı bir threadda çalışmalı:) Drdüncü sorun: gcc derleyici, nasıl gdb ile aynı çıktıyı üretebilir ki? gdb ile yapmak istediğiniz nedir? Olaylara karışmayın!

İlk sorun: https://en. wikipedia. org/wiki/Screen_tearing İkinci sorun: Yükseklik vs. ekranın neresinden hesaplanıyor? Ağırlık merkezi ile hesaplaman kolaylık sağlar. Bu yolla x1, y1 > y1 + h / 2 ; x1 + w / 2 ekrandaki koordinatlar olabilir. Belki de burada ufak bir kod hatası vardır:) Üçüncü sorun: İşte player farklı bir şey. Player diye bir nesnem olacaksa, kullanıcının girdilerini kontrol etmeli hatta ayrı bir threadda çalışmalı:) Drdüncü sorun: gcc derleyici, nasıl gdb ile aynı çıktıyı üretebilir ki? gdb ile yapmak istediğiniz nedir? 1. cevaba bakıyorum.2. sorunu max_speed i kısıtlayarak hallettim.3. Sadece player için değil, oyun içinde düşmanlar veya herhangi DynamicEntity'ler olacak, aynı sorun o zaman da ortaya çıkacak.4. Çıktıdan kastım hata metinleri, rneğin gcc'den memory corrupted hatası alıyorum, gdb'den daha ayrıntılı bir mesaj bekliyorum ama aynı şeyi sylüyor. Ya da sadece bu durum için de geçerli olabilir bilmiyorum. Teşekkürler cevap için, screen tearing olayına bakıyorum.

Anladığım kadarıyla olay ekranın yenilenme hızıyla alakalıymış. Sorunun çzümü olarak da çoğu kişi render ve update hızını sabitlemeye çalışmış. SDL1'de yenilenme hızı performansa gre belirlenirken (zorla da 60hz çalıştırma imkanı varmış) SDL2'de varsayılan olarak 60hz'e çıkmaya çalışıyormuş. Şunları denedim: (Burada DOUBLEBUFF diye bi flag var ama SDL2'de kaldırılmış sanırım) (Burada adam SDL_putenv ile birşeyler yapmış ama sadece Windows dediği için denemedim. Bu da SDL1.) (Bunları ekleyince nedense daha ktü bir hal aldı : Bin nasihat bir müsibet demişler baya birşey ğrendim ama sonuç yine aynı... Acaba diyorum benim ekran kartı sürücülerim ile ilgili bir problem olabilir mi? Ubuntu kullanıyorum, sürücüleri diğer platformlara gre biraz geridedir belki de. edit: Sorun bende olabilir diye şuradaki çzümü denedim, sanki biraz daha iyi gibi ama denk mi geldi bilmiyorum. Çünkü her zaman aynı şekilde bozulma olmuyor, bazen daha az oluyor. Şuradaki cevaptaki güncellemeleri de yaptım. Sanırım ekran kartıyla ilgili bir problem değil. Waze tarafından 21/Kas/15 03:55 tarihinde düzenlenmiştir