Diskuze: Střílení na nejbližšího nepřítele
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.
Člen
Zobrazeno 23 zpráv z 23.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí GameMakeru, jsme si ověřili nabyté zkušenosti z kurzu.
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ť..
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;
______________________________________________________
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ž...
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...
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.
Raději dodám, že výsledný úhel dosadíš do image_angle té věže.
point_direction(x1,y1,x2,y2);
Jasně, tak jsem to dělal, ale potřebuju souřadnice určité instance nepřítele.
Já to tvý zkusím, ono to přece jen není tak dlouhý jak to vypadá.
eregu, v tvém kodu jsou objekty hrac, npc a nepritel; jaký je rozdíl mezi nepritelem a npc? (jako v tom kódu)
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.image), 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.
Díky, modifikoval jsem styly a zapomněl na kódy ve fóru.
Sorry, v tu chvíli jsem byl trochu naštvaný, tak jsem to jen tak napsal...
Zobrazeno 23 zpráv z 23.