yöneltildiği yönde bir oyuncuyu hareket ettirin? matrisi kullanılarak

oy
-2

Ben 3d uzayda iki karakter var. Ben düşman oyuncuya doğru hareket etmek istiyorum. Sadece iki nesne dönüşümü alır ve o zaman benim düşman için geçerli bir matris, (konum bölümünün üzerine yazması) döndürür ve sonuç olarak hep oyuncuya bakıyor bir işlev yapmayı bitirdiniz. Ben olabilir onu bu yönde hareket anlamaya olamaz.

Oluştur 27/11/2018 saat 18:15
kaynak kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
0

Ne yapmaya operatörleri eklemek gerekir böylece her karakter bir konuma sahiptir varsayalım P1 - P23D vektör diff almak için. Bunun üzerine, sadece karakterin hızına vektör uzunluğunu normalleştirmek. Düşman oyuncu doğru çalışır ve oyuncu kaçmaya çalışır ama yavaştır, bu nedenle düşman sonunda oyuncuyu yakalayacak burada bir simülasyon çalışacaktır.

#include <iostream>
#include <cmath>

struct Position {
    double x;
    double y;
    double z;
    Position& operator+=(const Position& other) {
        x += other.x;
        y += other.y;
        z += other.z;
        return *this;
    }
    Position operator+(const Position& other) const {
        Position rv(*this);
        rv += other;
        return rv;
    }
    Position& operator-=(const Position& other) {
        x -= other.x;
        y -= other.y;
        z -= other.z;
        return *this;
    }
    Position operator-(const Position& other) const {
        Position rv(*this);
        rv -= other;
        return rv;
    }
    Position operator-() const {
        Position rv(*this);
        rv.x = -rv.x;
        rv.y = -rv.y;
        rv.z = -rv.z;
        return rv;
    }
    Position& operator*=(double f) {
        x *= f;
        y *= f;
        z *= f;
        return *this;
    }
    double length() const {
        return std::sqrt(x*x + y*y + z*z);
    }
    void normalize(double max_speed) {
        double len=length();
        if(len>max_speed) {
            *this *= max_speed/len;
        }
    }
    friend std::ostream& operator<<(std::ostream&, const Position&);
};
std::ostream& operator<<(std::ostream& os, const Position& pos) {
    os << "{" << pos.x << "," << pos.y << "," << pos.z << "}";
    return os;
}

int main() {
    Position enemy{100, 100, 100};
    Position player{50, 150, 20};
    Position enemy_aim;
    Position player_flee;

    while( (enemy_aim = player-enemy).length()>0 ) {
        std::cout << "distance: " << enemy_aim.length() << "\n";
        std::cout << "enemy: " << enemy << "  player: " << player << "\n";

        player_flee = enemy_aim;    // player runs in the same direction (to get away)
        player_flee.normalize(5);   // the max speed of the player is 5
        player += player_flee;      // do the players move

        enemy_aim = player-enemy;   // recalc after players move
        enemy_aim.normalize(10);    // the max speed of the enemy is 10
        enemy += enemy_aim;         // do the enemys move
    }
    std::cout << "enemy: " << enemy << "  player: " << player << "\n";
}
Cevap 27/11/2018 saat 18:48
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more