Şimdi Ara

For ve If içindeki değişkeni orjinal değerine döndürmek

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
2
Cevap
0
Favori
624
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • Bir oyuna update yapmaktayım. Oyunda çeşitli birimlerin çeşitli silahları var.
    Örnek olarak: Baneblade Süper Ağır Tankının Baneblade Cannon, Demolisher Cannon ve Heavy Bolter diye silahları var. Oyundaki bazı silahların da farklı özellikleri olabiliyor. Siege, Terror, AA, Area ve "" yani özelliksiz gibi. Bu örneğimdeki silahların özellikleri şöyle: Baneblade Cannon"" (bu, string olarak boş karakterli, yani null değil), Demolisher Cannon - Siege, Heavy Bolter - "".

    Yapmak istediğim şu: Eğer bir silahın özelliğinde "Siege" varsa, saldırdığım düşmanın siper bonusu yok sayılıcak yani başka bir deyişle 0 olacak. Bunun kodu kısaca:

    for (int w = 0; w < 4; w++)
    {
    ... // başka kodlar

    int nDefCover = g_arrTerrainTypes[m_arrUnitEx[nDef].nTerrain].nCover; // nCover değerini resetlemek için
    const auto& traits = m_arrUnitEx[nAtt].unit.pType->arrWeapons[w]->strTraits;

    // Burada bir silahın özelliklerinde "Siege" var mı diye kontrol ediyorum
    if (traits.Find("Siege") != std::string::npos)
    {
    // nCover, saldırdığım, yani savunan birimin siper değerini veriyor
    g_arrTerrainTypes[m_arrUnitEx[nDef].nTerrain].nCover = 0;
    }

    ... // başka özellikli silahlar için kodlar

    if (traits.Find("") != std::string::npos)
    {
    g_arrTerrainTypes[m_arrUnitEx[nDef].nTerrain].nCover = nDefCover;
    }
    }

    Ancak şöyle bir durum var: Sıege silahı için nCover'ı sıfırladıktan sonra orjinal değerine döndürmeliyim yoksa diğer tüm silahlar için de nCover değeri 0 olarak kalıyor. Bunun içinde traits.Find satırındaki if'i yazdım.

    Ama sistem şöyle çalışıyor: oyun ilk silaha bakıyor ve "" görüyor, nCover resetleniyor (yani değişmiyor),
    Oyun ikinci silaha bakıyor ve "Siege" görüyor, nCover'ı 0 yapıyor.
    Oyun üçüncü silaha bakıyor ve "" görüyor, nCover'ı resetliyor.

    Yani en son durumda nCover resetlendiği için Siege silahının değer değiştirmesi hiç bir işe yaramıyor. Yani durum 1 OR 1 OR 0 gibi çalışıyor.
    Eğer son silah Siege olsaydı bu kod işe yarayabilirdi ama oyunda bir çok birim var ve hepsinin de silah yerleri farklı. Yani Siege özellikli silah 1.silah da olabilir, 2.silah da olabilir, 3.silah da olabilir, 4.silah da olabilir. Kısacası belirsiz.

    Sadece Siege özellikli silahlar için nCover'ı 0 yapıp birimin diğer silahları için nCover'ı nasıl resetleyebilirim? Döngüyle olabilir ama hangi döngüyü nereye hangi değerde yazıcam bilmiyorum.



    < Bu mesaj bu kişi tarafından değiştirildi kangax -- 18 Temmuz 2017; 2:03:23 >
    < Bu ileti tablet sürüm kullanılarak atıldı >







  • siege olan silahın hasarını coverı yok sayacak şekilde artırma gibi bi yöntem uygulayamazsın değilmi hasarını göstermezsin oyun içinde arka planda olan birşey olur yani coverı yok sayar
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.