Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[c++] sztuczna inteligencja

Ostatnio zmodyfikowano 2025-06-04 00:27
Autor Wiadomość
megatron
Temat założony przez niniejszego użytkownika
[c++] sztuczna inteligencja
» 2013-02-21 18:37:13
Witam serdecznie.
Mam małą sztuczną inteligencję i wygląda tak:
           
C/C++
if( kam_pos.X > pos_pos.X )
{
    pos_pos.X++;
    pos->setPosition( pos_pos );
}
if( kam_pos.X < pos_pos.X )
{
    pos_pos.X--;
    pos->setPosition( pos_pos );
}
if( kam_pos.Z > pos_pos.Z )
{
    pos_pos.Z++;
    pos->setPosition( pos_pos );
}
if( kam_pos.Z < pos_pos.Z )
{
    pos_pos.Z--;
    pos->setPosition( pos_pos );
}
skróciłem trochę żeby było czytelniejsze.
Ok więc konkretnie o co mi chodzi???
O to, że nie wiem co zrobić by postać odwracała się w moją stronę albo chociaż w stronę którą idzie.
Oczywiście mój projekt jest w irrlicht, a umieściłem ten post tutaj bo wydaje mi się, że mało ważne to jest w czym robię.
Z góry dziękuję za odpowiedzi

widzę, że coś nie chętnie piszecie odpowiedzi do moich postów
P-76643
DejaVu
» 2013-02-21 20:30:00
Twój problem nie ma nic wspólnego ze sztuczną inteligencją.
C/C++
kierunek_x = 1; //przed pętlą
//...
//w pętli:
pozycja += kierunek_x;
if( jakis_warunek )
     kierunek_x = - 1;

if( inny_warunek )
     kierunek_x = 1;
P-76660
megatron
Temat założony przez niniejszego użytkownika
» 2013-02-21 21:20:45
Robilem podobnie jak napisales ale postac obracala sie tyłko w 2 strony a pozostale argumenty jak by sie niespelnialy
P-76667
megatron
Temat założony przez niniejszego użytkownika
» 2013-02-26 19:26:39
Mam małe pytanku czy 360 to jest kont pełny w programowaniu???
bo mam małe przeczucie że nie
P-77109
m4tx
» 2013-02-26 19:43:33
Kont?...

Odpowiadając na pytanie: nie ma czegoś takiego jak "kont pełny w programowaniu". Wszystko zależy od użytych bibliotek i innych podobnych rzeczy.
P-77116
megatron
Temat założony przez niniejszego użytkownika
» 2013-02-26 19:49:40
*kąt a pisałem wcześniej, że w irrlicht
P-77117
Hipochondryk
» 2013-02-27 09:33:47
w czesci bibliotek służacych do robienia gierek, grafiki itp, kąty podaje się w radianach. Polecam przeliczyć ;)

http://www.fizykon.org/rpo/radian_przeliczanie_na_stopnie.htm
P-77198
termistor
» 2025-06-04 00:27:02
Odpowiedź na pytanie o rotację postaci w irrlicht  

Aby postać skierowała się w stronę gracza, należy obliczyć kąt między wektorem pozycji postaci a wektorem pozycji gracza. W irrlicht kąty podaje się zwykle w stopniach, więc nie musisz przeliczać na radiany (chyba że używasz funkcji trygonometrycznych z biblioteki C++).  

Kroki realizacji:
 
1. Oblicz wektor kierunkowy od postaci do gracza:  
   
 
   f32 dx = kam_pos.X - pos_pos.X;  
   f32 dz = kam_pos.Z - pos_pos.Z;  
   
 

2. Wylicz kąt obrotu za pomocą atan2f (zwraca radiany, ale w irrlicht można pracować bezpośrednio w stopniach):  
   
 
   f32 angleRad = atan2f(dz, dx); // Zwraca kąt w radianach  
   f32 angleDeg = angleRad * (180.0f / M_PI); // Przelicz na stopnie  
   
 

3. Ustaw rotację postaci na osi Y (domyślnie w irrlicht rotacja Y to "obrót w pionie"):  
   
 
   pos->setRotation(vector3df(0, angleDeg, 0));  
   
 

4. Jeśli postać porusza się, upewnij się, że rotacja jest aktualizowana w każdej klatce animacji.  

Uwagi dodatkowe:  
- Jeśli model postaci nie jest wyprostowany (np. obraca się wokół innych osi), może być konieczne dodanie offsetu do kąta (np. angleDeg += 90).  
- Upewnij się, że wektor pozycji gracza (kam_pos) i postaci (pos_pos) są poprawnie przekazywane.  
- W przypadku braku efektu, sprawdź, czy funkcja setRotation jest wywoływana po aktualizacji pozycji (setPosition).  

Odpowiedź na pytanie o kąt pełny (360°):  
W programowaniu i irrlicht 360° to rzeczywiście kąt pełny. Jednak funkcje takie jak atan2f zwracają wartości w zakresie [-π, π] (radiany) lub [-180°, 180°] (stopnie). Dlatego przy operacjach na kątach należy uwzględnić normalizację (np. fmod(angleDeg, 360.0f)).  

Powodzenia w implementacji!
P-182466
« 1 »
  Strona 1 z 1