Skocz do zawartości

[Delphi][OMEGA]Kolizja wroga ,naśladowanie 1 wroga przez resztę ...


Dexarz

Polecane posty

A ja się nabrałem ....HAHAHA ..

 

No to wie ktoś jak wykryć tą kolizje z 3 warstwą mapy ???

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

  • Odpowiedzi 64
  • Created
  • Ostatnia odpowiedź

Z jakimi obiektami ???Jeszcze nie ma kolizji z graczem ...Jest kolizja tylko z mapą ,w graczu zastosowałem

if Sprite.name:='ground' then

ponieważ podczas ładowania mapy 3 warstwę nazwalem "ground' ..W przypadku gracza to działa ale w przypadku kiedy jest wielu wrogów to jak ostatni stworzony wróg już podlega kolizji z 3 warstwą mapy to reszta go naśladuje tak jakby "Sprite.name" był wspólnym dla wszystkich wrogów ...bez sensu ...Nie rozumiem w czym błąd ...

 

Mam pomysł ..Zrobię screenshota i pokaże o co chodzi

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Obrazek

 

I jeszcze kod który wykrywa kolizje ....

 

W Timerze mam

Enemy.Collision(Player)Ś)Q=
ąąĄMŃQMŃ
ą`
ądŃ))%]9eYąŃĄ)($Q<1
ź((%MŃ9ąŹŃĄ(QĄąŃm%t
ą      ąŹŃ(ą(QĄąŃm%t
ą      ąŹą(((%MŃ9ŃĄ((%ĄQĄąŃm%t5MŃĄQĄąŃm%tŃŃŃĄ(QĄąŃm%t%%(%ĄQĄąŃm%t5HĄQĄąŃm%tŃŃŃĄ(QĄąŃm%t%%(%ĄQĄąŃm%t50ĄQĄąŃm%tŃŃŃĄ(QĄąŃm%t%%(%QĄąŃm%t5ŃHŃĄ(QĄąŃm%t%%(%QĄąŃm%t5Ń0ŃĄ(QĄąŃm%t%%(QĄąŃm%tąŃ(ą(QĄąŃm%tąą()((Q
ąąQ)

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Przecież nie mam Sprite.Collission ,a Enemy.Collission(Player)

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Napisalem raz co miales zle w ruchu, napisales ze poprawiles. W tym kodzie ktory pokazujesz jest dokladnie ten sam zly sposob rozumowania, dokladnie ten sam typ bledu, i dokladnie tego samego nie rozumiesz.

 

Skoro ktos ci pisze abys nauczyl sie podstaw programowania obiektowego to pisze po to abys zrozumial co zle robisz a nie dlatego ze to fajna lektura i warto abys sie z nia zapoznal. Jak nie potrafisz zrozumiec obiektowki pisz strukturalnie. I zamiast codziennie pisac ze czegos nie rozumiesz (gdy juz ktos ci wytlumaczy co jest zle, przechodzisz do kolejnego zagadnienia i nie wiesz jak sie za nie zabrac) zacznij czytac tutoriale jest tego masa na sieci nie szukajac daleko na tym portalu jest kilka artsow po polsku. Uzywasz forum jak szkoly, nie wiem, nie wiem, nie wiem, jak , jak, jak ? Proponuje wiecej pracy samodzielniej mniej pytania o dobrze opisane podstawy.

 

jak dla mnie ET

Always Dark<br />u1_tt_logo.png banner-1.pngexFabula-banner.pngson_banner_ubersmall.jpg

Link do komentarza
Udostępnij na innych stronach

Błąd z ruchem poprawiłem bo widziałem że mam Sprite.Move i domyślałem się oco już chodzi ,ale ja teraz mam Enemy.Collision a nie Sprite.Collision i tego juz nie wiem ,bo jak jest Enemy ,to w takim razie zabiera się za 1 enemy ,a nie za wszystkich ,wiec kod jest wywołany 1 raz ,a nie 40 jak to było z Sprite.Move ....

 

 

EDIT ..

 

Zmieniłem trochę kody tworzenia wroga i dodałem kilka funkcji do ruchu postaci ...

 

Może i nie rozumiem ale jak mam w takim razie to naprawić ??Ja mam przecież Enemy.Collision(Player) w zegarze gry ,więc domyślam się ,że kod kolizji jest wywołany 1 raz ,a nie tyle razy ile wrogów ...

 

Ruch do naprawienia był prosty ,wystarczyła zmiana z

Sprite.Move(0)
vzZa^Y[J
H[[^K[J
Bhkkm-(3hzeŻ<i.b8ł&k7^bpp7&FR6ĆĆ6vzZa^Y[[[^JN[[^K[^YN

 

Nie pomogła ,dlatego już nie wiem w czym błąd i nie wiem jak naprawić ...

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Nie nie udaje ,po prostu nie wiem w czym błąd ,bo teraz to już nie jest wywoływane tyle razy ile wrogów więc w czym błąd ???Ludzie skąd ja to mam wiedzieć ??Próbowałem ,ale to nic nie dało ...

 

 

Przeczytałem artykuł o Strzelaniu w omedze ...Znalazłem ciekawy sposób na wykrycie Kolizji tzn

If Sprite is TKula then  ^śvvw8jrhŚjiŚKkjx-^ŚĘvłj-&ŚJ%8)+'3jŚŚzxŹ\"ę-Źj6ŹjXŚw3lprM3yź\"w8+$v.huJz7ŹhZvł{2ui'
Map.LoadMap(extractfilepath(Application.ExeName)+ '/GFX/' + NLevel + '.omap');
for a := 0 to Map.WidthCount -1  do
  for b := 0 to Map.HeightCount -1  do
     begin
     if Map.Layer1[a,b].ImageIndex <> -1 then
        begin
        Map.Layer1[a,b].DoCollision := True;
         end;
     if Map.Layer2[a,b].ImageIndex <> -1 then
         begin
        Map.Layer2[a,b].DoCollision := True;
        Map.Layer2[a,b].Name := 'Block';
         end;
      If Map.Layer3[a,b].ImageIndex = 1 then
         begin
           Map.Layer3[a,b].DoCollision := True;
           Map.Layer3[a,b].Name := 'ground';
         end;
     end;
:#zdĄ2źjxb8ŁZŻ6ŚŚzźzZaŃ[[^K[^YNŚ)Q=
ąąĄMŃQMŃ
ą`
ądŃ))%]9eYąŃĄ)($Q<1
ź((%MŃ9ąŹŃĄźąŃ(QĄąŃm%t
ą      ąŹŃź)ąŃź
ą      ąŹŃŃ(ą(QĄąŃm%t
ą      ąŹąź)ąŃźą(((%MŃ9ŃĄźąŃ((%ĄQĄąŃm%t5MŃĄQĄąŃm%tŃŃŃĄ(QĄąŃm%t%%(%ĄQĄąŃm%t5HĄQĄąŃm%tŃŃŃĄ(QĄąŃm%t%%(%ĄQĄąŃm%t50ĄQĄąŃm%tŃŃŃĄ(QĄąŃm%t%%(%QĄąŃm%t5ŃHŃĄ(QĄąŃm%t%%(%QĄąŃm%t5Ń0ŃĄ(QĄąŃm%t%%(QĄąŃm%tąŃź)ąŃź
ąŃŃ(ą(QĄąŃm%tąąź)ąŃźą()((Q
ąąQ)(

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Ale mi chodziło o Timer ,a nie o pętle ..

 

Gdyby było Sprite.Collision ,to wtedy wszyscy wrogowie podlegaliby tej procedurze ,Ja mam Enemy.Collision(Player) więc ta procedura jest wywolana 1 raz ...

 

Skasowałem pętle -> tylko 1 enemy podlegał kolizji ->sprawdziłem timer ->znalazłem kod ,ktory odpowiadał za kolizje tzn ,ustawiał jaki sprite może podlegać kolizji z warstwą ->Kod dałem w pętlę ,a zamiast Enemy w nawiasie dałem TEnemy(Enlist) -> Włączyłem grę -> nowa gra i ustalam liczbę przeciwniko ->ustawiłem na 6->Dałem okey i wiecie co ??Naprawilem problem ;)

 

Oto kody :

 

Timer :

 

Z

Enemy.Collision(Player)hvVz
zjmĘY(
ŚezĘJ%8jś^Źł<Źs,+
\"zvŚ]zZaÓX^Y[[[^JNX^Y[[[^J9zxziui'
for I := 0 to ENlist.Count -1 do
begin
Map.Layer2Collision(TEnemy(Enlist[i]));
Map.Layer3Collision(TEnemy(Enlist[i]));
end;

 

No i działa ...

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Teraz juz dziala ,patrz post wyżej ...no ten nad twoim ;)

 

 

EDIT No to w takim razie Toster co ty byś zrobił ???Bo tak mnie przekonujecie ,ale jak rozwiazać to już nie mówicie ...Jak widać ja miałem racje ,a nie wy...

 

No to toster pokaż co ty byś zrobił ...A potem zakmnę temat

Aktualnie piszę 32 bitowy system operacyjny.

ASE2.0 100% ,DME (Dynamic Motion Engine) v2.0 10% ,32 bit PumaOS - 40%

Stick's Adventure 3 - 0%

Komp nr.1 AMD Duron 1,3 Ghz ,256 MB Ram DDR PC133 (na eBoostr mam jeszcze 1 GB) ,Nvidia GeForce FX 5500 256MB DDR

Komp nr.2 (laptop) AMD Athlon XP 2,0 Ghz , 192 MB Ram DDR PC2700 (na eBoostr mam jeszcze 3 GB) , Via S3 Unichrome IGP

Przykład programu w ASE2.0:

<?arg #CreateProcs; $i:?;

#For('$i,10,1,@Lab');@Lab;

#Sleep(100);

#Message("Ten komputer ulegnie autodestrukcji za $i sekund");

#Retf;

#Message('Dead'); arg?>

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...