Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

[Irr] Problem z kolizja rower-rower


Rekomendowane odpowiedzi

Opublikowano

Witam mam problem z kolizja Rower-Rower chodzi oto zeby rowery nie były na sobie lecz podążały za sobą

 

 

 

#include "au3Irrlicht2.au3"
#include "misc.au3"
$screen_width = 1600 ;szerokosc okna
$screen_height = 850 ;wysokosc okna
_IrrStart() ;zainicjowanie silnika Irrlicht
_IrrSetWindowCaption("Wycieczka") ;tytul dla okna
$postac = _IrrGetTexture("postac.bmp");
$przeszkoda = _IrrGetTexture("kolizj.bmp");
$mob = _irrgettexture("mob.bmp")
$mob2 = _irrgettexture("mob2.bmp")
_IrrColorKeyTexture($postac, 255, 255, 255)
_IrrColorKeyTexture($mob, 255, 255, 255)
_IrrColorKeyTexture($mob2, 255, 255, 255)
$x = 10 ;pozycja x postaci
$y = 540 ;pozycja y postaci
$xmob = 400
$ymob = 400
$xmob2 = 500
$ymob2= 500

WHILE _IrrRunning()
   _IrrBeginScene(0, 0, 0) ;rozpoczecie rysowania sceny ,nadanie tła
   _IrrDraw2DImageElement($postac, $x, $y, 0, 0, 50, 50, $IRR_use_ALPHA) ;to nasza postac
   _IrrDraw2DImageElement($przeszkoda, 90, 10, 0, 0, 650, 686, $IRR_IGNORE_ALPHA) ; to nasz przedmiot z którym kolidujemy
   _IrrDraw2DImageElement($mob, $xmob, $ymob, 0, 0, 50, 50, $IRR_use_ALPHA)
   _IrrDraw2DImageElement($mob2, $xmob2, $ymob2, 0, 0, 50, 50, $IRR_use_ALPHA)
   _Irrendscene() ;koniec rysowania sceny

   AImob1()
   AImob2()
   Txt()
   kolizja($x, $y, 50, 50, 300, 300, 200, -180, 0)

   sterowanie()
   Sleep(1)
WEnd
Func sterowanie()
   If _IsPressed("27") = 1 Then $x += 1.7 ;jesli zostanie nacisniety klawisz strzalki w prawo wtedy wartość $x zwiekszy sie o 5.
   If _IsPressed("25") = 1 Then $x -= 1.7
   If _IsPressed("28") = 1 Then $y += 1.7
   If _IsPressed("26") = 1 Then $y -= 1.7
EndFunc   ;==>sterowanie
Func kolizja($bohater_x, $bohater_y, $szer_bohater, $wys_bohater, $przeszkoda_x, $przeszkoda_y, $szer_przeszkoda, $wys_przeszkoda, $id = 0)
   If($bohater_x + $szer_bohater > $przeszkoda_x) And($bohater_y + $wys_bohater > $przeszkoda_y) And($bohater_x < $przeszkoda_x + $szer_przeszkoda) And($bohater_y < $przeszkoda_y + $wys_przeszkoda) Then
       If $id = 0 then
           If $bohater_x > $przeszkoda_x then $x += 0.45
           If $bohater_x < $przeszkoda_x then $x -= 0.45
           If $bohater_y > $przeszkoda_y then $y += 0.45
           If $bohater_y < $przeszkoda_y then $y -= 0.45
       EndIf
   EndIf
EndFunc   ;==>kolizja
func AImob1()
   if $xmob < $x then $xmob += 1.0
   if $ymob < $y then $ymob += 1.0
   if $ymob > $y then $ymob -= 1.0
   if $xmob > $x then $xmob -= 1.0
endfunc   ;==>AImob1
func AImob2()
   if $xmob2 < $x then $xmob2 += 1.5
   if $ymob2 < $y then $ymob2 += 1.5
   if $ymob2 > $y then $ymob2 -= 1.5
   if $xmob2 > $x then $xmob2 -= 1.5
endfunc   ;==>AImob2
Func Txt()
   if $xmob2 = $x +5 then $xmob2 += 0.0
   if $ymob2 = $y +5 then $ymob2 += 0.0
   if $ymob2 = $y +5 then $ymob2 -= 0.0
   if $xmob2 = $x +5 then $xmob2 -= 0.0
EndFunc

 

 

Opublikowano

	if $xmob2 = $x +5 then $xmob2 += 0.0
if $ymob2 = $y +5 then $ymob2 += 0.0
if $ymob2 = $y +5 then $ymob2 -= 0.0
if $xmob2 = $x +5 then $xmob2 -= 0.0

zajebiste. Nie ma to jak dodać 0

 

Ogólnie skopiowałeś kod z tutoriala. Pewnie go nie rozumiesz.

W kolizjach chodzi o ty, że jak wystąpi kolizja to nie przesówamy objektu. Proste

Zapisuj przesunięcie objektu do jakiejś tymaczosej zmiennej.

sprawdz kolizje dla przypuszczanyh nowych danych. jeśli wystąpi to pozostaw tak jak jest, a jeśli nie to przesuń objekt o wartość w tymczasowej zmiennej

 

ja osobiście preferuje sprawdzanie kolizji osobno dla obu (lub więcej) osi, ale nie chce mi się tłumaczyć. (ewentualnie kodzik z przykładem na labelach podeśle)

Opublikowano

Mylisz się rozumiem ten kod ale prawdą jest że go skopiowałem dokładnie możliwe ze tak napisałem w szkole nie patrzyłem tylko kombinowałem.

Ok spróbuje tak jak powiedziałeś.

Opublikowano

Punkt V w poradniku:

 http://www.mpcforum.pl/topic/592610-poradnik-pisanie-gry-2d-za-pomoca-silnika-irrlicht/

,gdzie $bohater_x i $bohater_y to będą np. zmienne pozycyjne roweru numer 1 a $przeszkoda_x $przeszkoda_y roweru nr2. Walnij to w pętlę po wyrysowaniu na przykład i już nie będą na siebie wchodziły...

(właściwie rower 1 na rower 2 nigdy nie wejdzie ale ten sam efekt w końcu) .

 

Aby podążały za sobą tak jak Sopel powiedział tylko użyj operatorów większy mniejszy i bez tych plusów jeśli robisz kolizje jak napisałem.

Co do wypowiedzi wyżej rozumiem ,że nie było błędu w:

Mylisz się rozumiem ten kod ale prawdą jest że go skopiowałem
bo trochę nie rozumiem wypowiedzi , jak byś zaprzeczał w dalszej części ;P

Skopiowałeś w takim razie czy nie?:P

Opublikowano

Skopiowałem a poprawkę na kolizje txt rower-rower pisałem w szkole a więc mogłem napisać głupoty a sam kod rozumiem mógłbym go nawet przetłumaczyć.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...