[C++] [FIX] Karakter Kayması ile İlgili Yapılabilecek Tüm Düzenlemeler

  • Konuyu açan Konuyu açan Silverhand
  • Açılış Tarihi Açılış Tarihi
  • Yanıt Yanıt 2
  • Gösterim Gösterim 197

Silverhand

Premium Üye
Premium Üye
Üye
Mesaj
33
Beğeni
54
Puan
331
Ticaret Puanı
0
Herkese Selam,

Başka bir platformda paylaşmıştım, buraya da paylaşıyorum.

Video ve Ekran Görüntüsü paylaşımlarında karakter kayması ile ilgili düzenlemelerin bu sıra popülerleştiğini gördüm. Öncelikle bu durum ile ilgili 1-2 sene önce ortalama bir platformda konu açtım ve aşağıdaki video ile problemi belirttim.



Daha sonra konu üzerinden bir çok kullanıcı tartışma başlattılar ve aşağıdaki düzenlemeler ile sorun ortadan kalkmış oldu.


ActorInstanceSync.cpp içerisinde void CActorInstance::__Push(int x, int y)
Kod:
Genişlet Daralt Kopyala
void CActorInstance::__Push(int x, int y)
{
    const D3DXVECTOR3& c_rv3Src=GetPosition();
    const D3DXVECTOR3 c_v3Dst=D3DXVECTOR3(x, -y, c_rv3Src.z);
    const D3DXVECTOR3 c_v3Delta=c_v3Dst-c_rv3Src;

    const auto LoopValue = 100;
    const D3DXVECTOR3 inc = c_v3Delta / LoopValue;

    D3DXVECTOR3 v3Movement(0.0f, 0.0f, 0.0f);

    IPhysicsWorld* pWorld = IPhysicsWorld::GetPhysicsWorld();
    if (!pWorld)
        return;

    for (int i = 0; i < LoopValue; ++i)
    {
        if (pWorld->isPhysicalCollision(c_rv3Src + v3Movement))
        {
            ResetBlendingPosition();
            return;
        }
        v3Movement += inc;
    }

    SetBlendingPosition(c_v3Dst);

    if (IsResistFallen())
        return;

    if (!IsUsingSkill())
    {
        const int len = sqrt(c_v3Delta.x*c_v3Delta.x+c_v3Delta.y*c_v3Delta.y);
        if (len > 150.0f)
        {
            InterceptOnceMotion(CRaceMotionData::NAME_DAMAGE_FLYING);
            PushOnceMotion(CRaceMotionData::NAME_STAND_UP);
        }
    }
}

ActorInstanceBattle.cpp CActorInstance::__ProcessDataAttackSuccess
Kod:
Genişlet Daralt Kopyala
        // VICTIM_COLLISION_TEST
        const D3DXVECTOR3& kVictimPos = rVictim.GetPosition();
        auto externalForceRatio = 1.0f;
        if (rVictim.IsResistFallen())
            externalForceRatio = 0.8f; // reduce external force almost like before
        rVictim.m_PhysicsObject.IncreaseExternalForce(kVictimPos, c_rAttackData.fExternalForce * externalForceRatio);
        // VICTIM_COLLISION_TEST_END





Güncel hali :
Linkleri görebilmek için giriş yap veya kayıt ol.
 
vay vay geliyo tüm konular heee
 
Üst