0 registered members (),
821
guests, and 2
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
ent_create action zuweisen?
#312770
02/26/10 13:45
02/26/10 13:45
|
Joined: Nov 2006
Posts: 116
benija
OP
Member
|
OP
Member
Joined: Nov 2006
Posts: 116
|
Hallo, ich bin gerade dabei meiner Spielfigur (Modell) die Fähigkeit des Schießens zu programmieren. Wenn die Taste "u" gedrückt wird, wird die funktion ent_create aufgerufen um eine Art Kugel zu erzeugen.
kugel = ent_create("CUBE.MDL",vector(my.x, my.y, my.z+50), shoot_right);
nun stellt sich mir die Frage, wie ich dieser neuen Entity ein Event zuweisen kann. Also wenn die "Kugel" auf einen Gegner trifft, soll ein Event ausgeführt werden. Wie kann ich dies tun?
|
|
|
Re: ent_create action zuweisen?
[Re: benija]
#312773
02/26/10 13:51
02/26/10 13:51
|
Joined: Apr 2005
Posts: 3,076 Germany, NRW
rvL_eXile
3D Artist
|
3D Artist
Joined: Apr 2005
Posts: 3,076
Germany, NRW
|
schreibe die Action anstatt der shoot_right hinein. Die Event definition kommt natürlich auch in die Action. Die Event Function kommt seperat... Beispiel:
Function Event_fnc
{
if(event_type==event_entity)
{
//do something...
}
}
Action My_action
{
Kugel=my;
event_entity=on;
my_event=Event_fnc;
//hier der rest der Action...
}
Function Main
{
on_u=ent_create("CUBE.MDL",vector(my.x, my.y, my.z+50), my_action);
}
Nicht getestet, aber glaube das der Aufbau korrekt ist... cYa Sebastian
Last edited by rvL_eXile; 02/26/10 13:55.
Tutorials: [Blender]Terrain creation ENG/GER [Blender]Low Poly Tree Modeling [GIMP]Create a Texture for Terrains CLICK HERE
|
|
|
Re: ent_create action zuweisen?
[Re: benija]
#312775
02/26/10 13:54
02/26/10 13:54
|
Joined: May 2009
Posts: 445 Peine, Germany
Razoron
Senior Member
|
Senior Member
Joined: May 2009
Posts: 445
Peine, Germany
|
Das machst du mit c_trace und ENABLE_SHOOT/EVENT_SHOOT
bei c_trace muss ACTIVATE_SHOOT als Flag gesetzt sein.
Aus dem Manual:
EVENT_SHOOT ENABLE_SHOOT Von einer c_trace-Anweisung mitACTIVATE_SHOOT getroffen. Modifiziert: you-Pointer auf tracende Entity, so es eine gibt. Beispiel: function shoot_event() { if (event_type == EVENT_SHOOT) { ent_playsound(my,whamm,50); ptr_remove(me); // disappear when hit } }
action exploding_barrel_shoot() { my.emask |= ENABLE_SHOOT; my.event = shoot_event; }
EDIT:Boa, nein schon wieder 2 1/2 Minuten zu spät -.-..
Last edited by Razoron; 02/26/10 13:55.
|
|
|
Re: ent_create action zuweisen?
[Re: Razoron]
#312798
02/26/10 14:27
02/26/10 14:27
|
Joined: Nov 2006
Posts: 116
benija
OP
Member
|
OP
Member
Joined: Nov 2006
Posts: 116
|
danke für eure Antworten, haben mir weiter geholfen, allerdings funktioniert das schießen noch nicht ganz. ich habe das PlayerModel, dieser habe ich eine Action zugewiesen, auf a nach rechts bewegen, d nach links bewegen und space springen. Zusätzlich habe ich nun programmiert, dass wenn a oder d und gleichzeitig u gedrückt wird, die Person in die jeweilige Richtung schießt. Allerdings hapert es genau daran. Meine Idee war, dass ich mit ent_create eine Art Kugel erzeuge, die sich dann mit c_move in die jeweilige Richtung bewegt. hier ein Teil der Player Action:
if(key_d)
{
my.pan = 0;
ent_animate(my, "run", stat_perc, ANM_CYCLE);
if(key_u)
{
//my.pan = 0;
ent_animate(my, "attack", stat_perc, ANM_CYCLE);
you = ent_create("CUBE.MDL",vector(my.x+50, my.y, my.z+50), aShoot_Right);
//wait(1);
stat_perc+=1;
}
stat_perc +=3;
move_entity = 8;
}
hier die Shoot Actions:
function shoot_left()
{
if(event_type == EVENT_BLOCK)
{
ptr_remove(me);
}
}
action aShoot_Left()
{
my.emask |= (ENABLE_BLOCK);
my.event = shoot_left;
while(1)
{
c_move(my,nullvector, vector(-5,0,0),GLIDE);
wait(1);
}
}
function shoot_right()
{
if(event_type == EVENT_BLOCK)
{
ent_remove(you);
}
}
action aShoot_Right()
{
my.emask |= (ENABLE_BLOCK);
my.event = shoot_right;
while(1)
{
c_move(my,nullvector, vector(5,0,0),GLIDE);
wait(1);
}
}
wo liegt mein Fehler?
|
|
|
Re: ent_create action zuweisen?
[Re: benija]
#312805
02/26/10 14:33
02/26/10 14:33
|
Joined: Apr 2005
Posts: 3,076 Germany, NRW
rvL_eXile
3D Artist
|
3D Artist
Joined: Apr 2005
Posts: 3,076
Germany, NRW
|
Anstatt der beiden Actions verschachtel das ganz mal in einer Function... Das entfernen der Entitys machst du dann nochmals ausserhalb in einer Seperaten Function. Beispiel:
Function Shoot
{
if(key_a==1)
{
//baller wild rum
}
if(key_d==1)
{
//baller wild rum #2
}
}
Function Remove_Bullet
{
//remove me (beide Pouinter abfragen
}
cYa Sebastian
Tutorials: [Blender]Terrain creation ENG/GER [Blender]Low Poly Tree Modeling [GIMP]Create a Texture for Terrains CLICK HERE
|
|
|
Re: ent_create action zuweisen?
[Re: rvL_eXile]
#312809
02/26/10 14:40
02/26/10 14:40
|
Joined: Mar 2007
Posts: 112
MikeS
Member
|
Member
Joined: Mar 2007
Posts: 112
|
Nun ja, mal ne ganz dumme frage, was genau funktioniert denn nicht richtig beim schießen?
definier mal genau welches problem du hast :-)
aber ich glaube ich hab da ein problem entdeckt, vielleicht ist das ja dein problem:
function shoot_right() { if(event_type == EVENT_BLOCK) { ent_remove(you); } }
Ein Block ist keine entity und kann somit nicht von ent_remove(you) beeinflusst werden (glaub ich jedenfalls, korrigiert mich wenn ich falsch liege). auserdem wird deine kugel so keine entity erkennen, sondern das event nur ausführen, wenn es einen level block trift. zudem wird sich die kugel nicht selbst entfernen, sondern die getroffene entity wird entfernt.
also, auch bei events wird die getroffene entity auf you gesetzt.
also, setzt mal das event auf EVENT_ENTITY und den ent_remove auf me.
gruß
Mike
Last edited by MikeS; 02/26/10 14:53.
|
|
|
Re: ent_create action zuweisen?
[Re: MikeS]
#312810
02/26/10 14:42
02/26/10 14:42
|
Joined: Apr 2005
Posts: 3,076 Germany, NRW
rvL_eXile
3D Artist
|
3D Artist
Joined: Apr 2005
Posts: 3,076
Germany, NRW
|
ich gehe davon aus, das Shoot_l nicht funktioniert... Da keine Kugel dafür erstellt wird..
Achja, schreibe mal den Pointer Kugel in die C_Move definitionen anstatt des "my" Pointers, das kann dir eventuelle Probleme ersparen...
Last edited by rvL_eXile; 02/26/10 14:45.
Tutorials: [Blender]Terrain creation ENG/GER [Blender]Low Poly Tree Modeling [GIMP]Create a Texture for Terrains CLICK HERE
|
|
|
Re: ent_create action zuweisen?
[Re: benija]
#312819
02/26/10 14:58
02/26/10 14:58
|
Joined: Mar 2007
Posts: 112
MikeS
Member
|
Member
Joined: Mar 2007
Posts: 112
|
Ah, dann füge mal ein:
action aShoot_Left() { my.emask |= (ENABLE_BLOCK); my.event = shoot_left; while(1) { c_move(my,nullvector, vector(-5,0,0),GLIDE); wait(1); } }
Player = you; c_move(my,nullvector, vector(-5,0,0),GLIDE | IGNORE_YOU);
Hm, IGNORE MODELS ist vielleicht nicht genau das was du willst, da damit alle models ignoriert werden, auch eventuelle gegner Models
Ich würds mit Ignore you machen, und den player als you definieren
du kannst das auch mit ner entfernungsabfrage kombinieren, damit event entities , das ja den gegner auf you setzt nicht ignoriert wird, also z,b.
if (vec_dist(my.x,player.x) < 20) { player = you c_move...... | IGNORE_YOU); } c_move....... GLIDE); // also ohne Ignore you
Last edited by MikeS; 02/26/10 15:05.
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|