2 registered members (AndrewAMD, 1 invisible),
1,395
guests, and 12
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Gegner. Wie programmiert man die ?
[Re: janerwac13]
#336115
08/01/10 18:30
08/01/10 18:30
|
Joined: Nov 2007
Posts: 2,568 Germany, BW, Stuttgart
MasterQ32
Expert
|
Expert
Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
|
hier mal ein kleiner Link für dich: Endlicher Automat Du brauchst Programmierkentnisse, einen Status und eine Verzweigung irgendwie so was:
var status = STEHEN;
while(me)
{
switch(status)
{
case STEHEN:
//Rumstehen...
break;
case LAUFEN:
//Laufen hier:
break;
case ANGRIFF:
//Hier angreifen
break;
case GETROFFEN_WERDEM:
//Hier getroffen werden
break;
default:
//Wenn keine gültiger Status, dann stehen
status = STEHEN;
break;
}
wait(1);
}
aufbau sollte klar sein, irgendwie so muss deine Basis aussehen, du kannst natürlich auch einen skill für den Status nehmen, so kommst auch von außen ran. Is aber viel arbeit! Vorallem muss sich der gegner ja realistisch verhalten. Ich hab in meinem Shooter einen Gegner mit glaube ich momentan 9 verschiedenen Stati, werden aber noch mehr Ein Teil davon: -Stehen -Herumlaufen -Umdrehen -Gegner suchen -Gegner finden -Gegner angreifen -Gegner nach angriff suchen -Sterben -Tot sein ...
|
|
|
Re: Gegner. Wie programmiert man die ?
[Re: MasterQ32]
#336132
08/01/10 20:04
08/01/10 20:04
|
Joined: Feb 2010
Posts: 482 in deinem Kopf
Otter
Senior Member
|
Senior Member
Joined: Feb 2010
Posts: 482
in deinem Kopf
|
Mal schauen ob ich dir nicht helfen kann. Fang am besten mal damit an ihn auf schüsse oder wände reagieren zu lassen: STRING* gegner; var anim_speed; action dummy_gegner() /////action die du deinem gegner gibst { gegner = me; my.leben = 6; while(my != NULL) { if(my.leben > 0) ////// sobald gegner mehr als 0 leben hat macht er das: { anim_speed += 8*time_step; if(anim_speed >= 100) anim_speed = 0; ent_animate(my, "walk", anim_speed, ANM_CYCLE); my.tilt = 0; c_move(my, vector(4, 0, 0), nullvector, GLIDE | IGNORE_ME | IGNORE_PASSABLE); if(trace_hit) { vec_to_angle(my.pan,bounce); my.pan += random(4)-2; } } else ////// wenn er weniger leben hat das: { anim_speed += 10*time_step; ent_animate(my, "death", anim_speed, ANM_CYCLE); if(anim_speed >= 90) ent_remove(me); } wait(1); } }
STRING* player_shoot; function hero_fire() /////function für deine geschosse { player_shoot = me; my.emask |= ENABLE_ENTITY; my.event = fire_react; my.pan = player.pan; my.tilt = player.tilt; vec_set(my.x, player.x); while (you != NULL) { c_move(my, vector(8, 0, 0), nullvector, IGNORE_YOU | IGNORE_ME | IGNORE_PASSABLE); wait(1); } }
function fire_react() /////reaktion deiner geschosse auf gegenstände oder mauern usw... { if(event_type == EVENT_ENTITY) { if(you == gegner) { your.leben -= 1; } } wait(1); ent_remove(me); } Du musst nur noch deiner Player action einige zeilen hinzufügen, die so aussiehen: if(key_space == 1) { ent_create (geschoss_mdl, my.x, hero_fire); while(key_space == 1){wait(1);} } der geger müsste jetzt durch den raum laufen, von den wänden abprallen und sterben wenn du ihn 6x triffst. du müsstest auch noch einige skills neu definieren z.B.: #define leben skill20 dann müsste eigentlich alles funktionieren und du hast eine gute basis für deine "experimente"
Be my UBB-Buddy, without any reason!
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|