Diskuze: Střílení na nejbližšího nepřítele

Ostatní jazyky GameMaker GameMaker Střílení na nejbližšího nepřítele

Avatar
Daniel Kosík (Ghost4Man):

Cestou půjde řada nepřátel a po okrajích budou věže; já chci aby každá věž střílela na nepřítele který je veži nejblíž, nebo na náhodného nepřítele který je veži v určitém dosahu, ale nevím jak to udělat. Předem děkuji za odpovědi

Odpovědět 23.8.2012 11:08
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Avatar
xM4tHeWx
Redaktor
Avatar
xM4tHeWx:

Vo veži

if instance_exists(o_enemy)>=1 //ak existuje viac ako 1nepriatel
{
    if distance_to_object(o_enemy)<80 //ak je nepriatel blizsie ako 80
    {
        instance_create(x,y,o_strela); // vytvorí strelu
    }
}

V strele

target = instance_nearest(o_enemy); //nastaví ciel na nepriatela
move_towards_point(target.x,target.y,16); //nastaví smer a rýchlosť na ciel a rýchlosť 16

myslím že by to tak malo ísť..

 
Nahoru Odpovědět 23.8.2012 11:59
Avatar
ereg
Člen
Avatar
ereg:

kdyby te zajimal :) nahodny vyber nejblizsi instance:

Information about object: o_hrac

Sprite: sprite0
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: <no parent>
Mask: <same as sprite>

Create Event:
execute code:

idn=0;  // pauza mezi strelbou
idn1=0; // ---//---


Alarm Event for alarm 0:
execute code:

idn=0;  // pauza mezi strelbou


Alarm Event for alarm 1:
execute code:

idn1=0; // pauza mezi strelbou


 Step Event:
execute code:

if instance_exists(o_nepritel)>=1  && idn==0 //ak existuje viac ako 1nepriatel
{
    if distance_to_object(o_nepritel)<80  //ak je nepriatel blizsie ako 80
    {
        idn=instance_create(x,y,o_strela); // vytvorí strelu
        target = instance_nearest(x, y, o_nepritel); //nastaví ciel na nepriatela
        idn.direction=point_direction(x, y, target.x, target.y); //nastaví smer
        idn.image_angle=idn.direction; // natoci strelu smerem kam leti
        idn.speed=5;  // nastavi rychlost
        idn=-1;  // zapne pauzu ve strelbe
        alarm[0]=60; // nastavi cas vypnuti pauzy ve strelbe
    }
}

if instance_exists(o_npc)>=1 && idn1==0 //ak existuje viac ako 1nepriatel
{
    poc=0; // pocitadlo instanci v dostrelu
    with(o_npc) {
        if distance_to_object(o_hrac)<100{ // testuje vsechny nepratele jestli je nepritel bliz nez 100
            o_hrac.idnx[o_hrac.poc]=id; // pokud je bliz, zapise hraci id instance o_npc
            o_hrac.poc+=1;  // zvysi pocitadlo instanci
            image_alpha=.5; // nastavi pruhlednost pro efekt dostrelu
        }
        else {image_alpha=1;} // zrusi pruhlednost, efekt mimo dostrel
    }
    if idnx[0]>0 {  // pokud je alespon 1 o_npc na dostrel pokracuj
        target1=idnx[irandom_range(0,poc-1)];  // vyber nahodne cil ze zapsanych id
        idnx[0]=0; // resetuj 1. id , protze pokud priste nejake najde vzdy se zapise nejdrive do idnx[0]
        idn1=instance_create(x,y,o_strela); // vytvorí strelu
        idn1.direction=point_direction(x, y, target1.x, target1.y); //nastaví smer
        idn1.image_angle=idn1.direction;  // natoci strelu smerem kam leti
        idn1.speed=5;  // nastavi rychlost
        idn1.image_alpha=.5; // nastavi pruhlednost strele, efekt aby sly strely lepe rozeznat.
        idn1=-1;  // zapne pauzu ve strelbe
        alarm[1]=30; // nastavi cas vypnuti pauzy ve strelbe
    }
}

______________________________________________________

Information about object: o_nepritel

Sprite: sprite1
Solid: false
Visible: true
Depth: -1
Persistent: false
Parent: <no parent>
Mask: <same as sprite>

Mouse Event for Left Button:
execute code:

x=mouse_x;
y=mouse_y;

______________________________________________________

Information about object: o_strela

Sprite: sprite2
Solid: true
Visible: true
Depth: 0
Persistent: false
Parent: <no parent>
Mask: <same as sprite>

Collision Event with object o_nepritel:
execute code:

instance_destroy();


Collision Event with object o_npc:
execute code:

instance_destroy();

______________________________________________________

Information about object: o_npc

Sprite: sprite3
Solid: false
Visible: true
Depth: 0
Persistent: false
Parent: <no parent>
Mask: <same as sprite>

Mouse Event for Left Button:
execute code:

x=mouse_x;
y=mouse_y;

______________________________________________________
 
Nahoru Odpovědět 23.8.2012 13:40
Avatar
Daniel Kosík (Ghost4Man):

xM4tHeWx funguje to, ale kdyz ta vez toho nepritele nestihne znicit, tak po nem strili i kdyz uz neni v dosahu.

Nahoru Odpovědět 23.8.2012 14:10
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Daniel Kosík (Ghost4Man)
matesax:

Tak tam přidej, že vzdálenost musí být menší než X...

Respektive můžeš kontrolovat objekt na který střílíš a dát podmínku, je-li vzdálenost aktuálního nepřítele (jeho id si uložíš do proměnné v momentě, kdy na něj poprvé zaútočíš) větší než...

 
Nahoru Odpovědět 23.8.2012 14:19
Avatar
ereg
Člen
Avatar
ereg:

v mem prikladu v obou postupech prestane o_hrac(vez)strilet kdyz neni nadosah :)

 
Nahoru Odpovědět 23.8.2012 18:16
Avatar
Daniel Kosík (Ghost4Man):

Ještě potřebuji, aby se věž otáčela za tím nepřítelem, na kterého střílí; zkoušel jsem to, ale nějak jsem na to nepřišel. Předem díky za odpověď.

Nahoru Odpovědět 23.8.2012 20:44
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Daniel Kosík (Ghost4Man)
matesax:

To ti tu pomalu můžeme poslat celou hru... :)

 
Nahoru Odpovědět 23.8.2012 20:51
Avatar
Daniel Kosík (Ghost4Man):

Já bych si to udělal sám, ale nevím jak udělat, aby se ta věž otáčela za tím nepřítelem, na kterého střílí.

Nahoru Odpovědět 23.8.2012 20:56
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Avatar
Kit
Redaktor
Avatar
Odpovídá na Daniel Kosík (Ghost4Man)
Kit:

Odečteš od sebe souřadnice věže a cíle, vydělíš vzdáleností a vynásobíš délkou hlavně. Tím dostaneš souřadnici jejího konce.

Alespoň tak nějak bych to dělal v něčem jiném, než GM.

Nahoru Odpovědět 23.8.2012 21:06
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
matesax
Redaktor
Avatar
Odpovídá na Daniel Kosík (Ghost4Man)
matesax:

Když na něj začneš střílet, musíš v tom momentu znát jeho ID - či tak něco. To si uložíš a pak jen budeš aktualizovat úhel otočení věže podle polohy objektu s uloženým ID...

 
Nahoru Odpovědět 23.8.2012 21:06
Avatar
David Čápka
Tým ITnetwork
Avatar
Nahoru Odpovědět 23.8.2012 21:19
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Daniel Kosík (Ghost4Man)
David Čápka:

Raději dodám, že výsledný úhel dosadíš do image_angle té věže.

Nahoru Odpovědět 23.8.2012 21:20
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na David Čápka
Daniel Kosík (Ghost4Man):
point_direction(x1,y1,x2,y2);

Jasně, tak jsem to dělal, ale potřebuju souřadnice určité instance nepřítele.

Nahoru Odpovědět 23.8.2012 21:23
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Avatar
ereg
Člen
Avatar
ereg:

poradil bych ti, at si prostudujes priklad v mem prispevku vyse. mas tam vse co potrebujes vedet.
ale asi je to zbytecna rada.:(

 
Nahoru Odpovědět 23.8.2012 22:56
Avatar
Odpovídá na ereg
Daniel Kosík (Ghost4Man):

Já to tvý zkusím, ono to přece jen není tak dlouhý jak to vypadá.

Nahoru Odpovědět 24.8.2012 8:43
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Avatar
Daniel Kosík (Ghost4Man):

Jinak, nevíte někdo proč ty kódy tady mají akorát změněnej font, a jinak je to prostý písmo? Proř to není modrý?

Nahoru Odpovědět 24.8.2012 8:48
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Avatar
Nahoru Odpovědět 24.8.2012 8:49
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Avatar
Odpovídá na ereg
Daniel Kosík (Ghost4Man):

eregu, v tvém kodu jsou objekty hrac, npc a nepritel; jaký je rozdíl mezi nepritelem a npc? (jako v tom kódu)

Nahoru Odpovědět 24.8.2012 8:56
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Avatar
Daniel Kosík (Ghost4Man):

eregu nějak to nefunguje

Nahoru Odpovědět 24.8.2012 11:53
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Avatar
ereg
Člen
Avatar
ereg:

cely priklad je Show object information o cele hre.
tedy navod jak nastavit objekty.
sprity si musis nastavit jake chces, ale protze jsou vzdy prirazeny k objektu tak je to jen na tobe jestli o_hrac bude vypadat jako popelnice, clovek nebo vez.

pro jistotu ti jsem ten priklad nahral sem:
http://ulozto.cz/…se-tower-zip

v prikladu je pouzita prace s jinym objektem(idn.i­mage), s vsemi objekty urciteho typu(with).

posunovani o_nepritel a o_npc je takova nouzovka(o vic ani neslo)

pokud neco nebude jasne nebo jiny problem nepis dotaz" nejak to nefunguje" :)
popis problem celymi vetami ci souvetimi a nejlepe rozvitymi. ;-)

 
Nahoru Odpovědět 24.8.2012 13:01
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Daniel Kosík (Ghost4Man)
David Čápka:

Díky, modifikoval jsem styly a zapomněl na kódy ve fóru.

Nahoru Odpovědět 24.8.2012 13:20
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Odpovídá na ereg
Daniel Kosík (Ghost4Man):

Sorry, v tu chvíli jsem byl trochu naštvaný, tak jsem to jen tak napsal... :D

Nahoru Odpovědět 25.8.2012 10:12
Všechno na světě můžete chtít. Jenom nemůžete chtít, aby se vám chtělo.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 23 zpráv z 23.