3 registered members (NewbieZorro, TipmyPip, 1 invisible),
19,045
guests, and 8
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
lite-C Playerbewegung Problem
#218310
07/27/08 20:10
07/27/08 20:10
|
Joined: Jan 2005
Posts: 74 Deutschland
Maschine
OP
Junior Member
|
OP
Junior Member
Joined: Jan 2005
Posts: 74
Deutschland
|
Hallo Zusammen, Ich Beginne gerade mit lite-C, und habe wohl gerade einen gewaltigen Block im Kopf. ich habe gerade eine action für meine Playerfigur geschrieben, und wundere mich warum es nicht funktioniert. Helft mir bitte auf die Sprünge, hier die action: action playermove2() { plmod = my; while (pl_energie > 0) { if (key_w){pl_speed.x = 10 * time_step;} if (key_s){pl_speed.x = -10 * time_step;} if (key_a){pl_speed.y = 5 * time_step;} if (key_d){pl_speed.y = -5 * time_step;} c_move (my, vector(pl_speed.x, pl_speed.y, pl_speed.z), nullvector, GLIDE); wait (1); } }
sobald ich eine der 4 Tasten drücke hört die figur nicht mehr auf zu gehen, wo ist mein Fehler? bin seit einigen Monaten nicht mehr mit 3dgs im Gange gewesen, lese Handbuch, andere Scripte und weis nicht mehr weiter.
Eine Stimme sprach zu mir:" Lächle und sei froh... es könnte schlimmer kommen". Ich lächelte und war froh... und es kam schlimmer!
|
|
|
Re: lite-C Playerbewegung Problem
[Re: Maschine]
#218316
07/27/08 21:01
07/27/08 21:01
|
Joined: Aug 2003
Posts: 7,440 Red Dwarf
Michael_Schwarz
Senior Expert
|
Senior Expert
Joined: Aug 2003
Posts: 7,440
Red Dwarf
|
nun, weil du die geschwindigkeit SETZT sobald du eine taste drückst, aber nicht mehr auf 0 ZURÜCKSETZT sobald du die tasten loslässt. Abgesehen davon ist dein versuch nicht sehr effizient. Aber das beiseite, sonst guter anfang. Falls du möchtest, kannst du dir meinen artikel über Half-Life movement in 3dgs mal durchlesen: http://3dgsnerd.xware-cg.com/code-snippet-1/
"Sometimes JCL reminds me of Notch, but more competent" ~ Kiyaku
|
|
|
Re: lite-C Playerbewegung Problem
[Re: Michael_Schwarz]
#218649
07/29/08 17:58
07/29/08 17:58
|
Joined: Jan 2005
Posts: 74 Deutschland
Maschine
OP
Junior Member
|
OP
Junior Member
Joined: Jan 2005
Posts: 74
Deutschland
|
Hallo Michael, Danke für die schnelle Antwort, habe pl_speed.x und pl_speed.y nach der c-move-Zeile auf 0 gesetzt. Nun funktioniert es. Habe Deinen Artikel gelesen Kopiert und ausgedruckt... bin noch nicht soweit das zu begreifen... Danke auch für das Lob (guter Anfang) aber warum ist der Code in Deinen Augen nicht effizient? Diese Frage stelle ich nicht empört oder beleidigt, vielmehr will ich lernen. Ich habe einige wenige Beispiele zur Playerbewegung gelesen, er war immer so ähnlich vom Ablauf. Ich habe globale Variablen gewählt, weil der Gegner sie verarbeiten soll, d.h. er soll seine Entscheidungen nach dem Zustand, Status des Players richten. oder was genau meinst Du??
Eine Stimme sprach zu mir:" Lächle und sei froh... es könnte schlimmer kommen". Ich lächelte und war froh... und es kam schlimmer!
|
|
|
Re: lite-C Playerbewegung Problem
[Re: Maschine]
#218656
07/29/08 18:32
07/29/08 18:32
|
Joined: Jan 2007
Posts: 221
Fenriswolf
Member
|
Member
Joined: Jan 2007
Posts: 221
|
Hallo, Ich habe globale Variablen gewählt, weil der Gegner sie verarbeiten soll, d.h. er soll seine Entscheidungen nach dem Zustand, Status des Players richten. Anstatt der globalen Variablen kannst du auch Entityskills verwenden:
#define SPEED_X 0
#define SPEED_Y 1
#define SPEED_Z 2
...
my.skill[SPEED_X] = ...;
Die kannst du dann außerdem universell für alle Entities verwenden, die sich bewegen (also auch für die Gegner). Die bedingten Anweisungen kannst du ebenfalls los werden:
my.skill[SPEED_X] = (key_w - key_s) * 10 * time_step;
my.skill[SPEED_Y] = (key_d - key_a) * 10 * time_step;
Letzte Sache: Die Schwerkraft sollte keine relative sondern eine absolute Geschwindigkeit sein.
c_move (my, vector(my.skill[SPEED_X], my.skill[SPEED_Y], 0), vector(0, 0, my.skill[SPEED_Z]), GLIDE);
Das als kleiner Denkanstoß; ich hoffe es hilft. : )
|
|
|
Re: lite-C Playerbewegung Problem
[Re: Fenriswolf]
#218657
07/29/08 18:46
07/29/08 18:46
|
Joined: Jan 2005
Posts: 74 Deutschland
Maschine
OP
Junior Member
|
OP
Junior Member
Joined: Jan 2005
Posts: 74
Deutschland
|
Hallo Fenriswolf, Es wird mir sehr helfen, danke. eine nebenfrage noch: Ich war lange nicht mehr hier im Forum und sehe, wenn code im Post eingefügt wird diese scrollbaren Boxen. vieleicht ne blöde Frage , aber wie macht Ihr das?
Eine Stimme sprach zu mir:" Lächle und sei froh... es könnte schlimmer kommen". Ich lächelte und war froh... und es kam schlimmer!
|
|
|
Re: lite-C Playerbewegung Problem
[Re: Fenriswolf]
#218667
07/29/08 19:44
07/29/08 19:44
|
Joined: Jan 2005
Posts: 74 Deutschland
Maschine
OP
Junior Member
|
OP
Junior Member
Joined: Jan 2005
Posts: 74
Deutschland
|
mein Dank wird Dir auf ewig nachschleichen!! gleich mal ein Test hura!
Eine Stimme sprach zu mir:" Lächle und sei froh... es könnte schlimmer kommen". Ich lächelte und war froh... und es kam schlimmer!
|
|
|
Re: lite-C Playerbewegung Problem
[Re: Maschine]
#218818
07/30/08 19:29
07/30/08 19:29
|
Joined: Jan 2005
Posts: 74 Deutschland
Maschine
OP
Junior Member
|
OP
Junior Member
Joined: Jan 2005
Posts: 74
Deutschland
|
Hallo Fenriswolf, habe mal Deine Vorschläge versucht umzusetzen, hier mein Ergebnis: ///////////////////////////////
#include <acknex.h>
#include <default.c>
///////////////////////////////
#DEFINE pl_speed_x, SKILL1;
#DEFINE pl_speed_y, SKILL2;
#DEFINE pl_speed_z, SKILL3;
#DEFINE pl_energie, SKILL4;
#DEFINE pl_weg_x, SKILL1;
#DEFINE pl_weg_y, SKILL2;
#DEFINE pl_weg_z, SKILL3;
///////////////////////////////
ENTITY* pl_mod;
///////////////////////////////
function main()
{
fps_max = 150;
video_mode = 9; // Starteinstellung für 1280 * 1024
video_depth = 32; // Starteinstellung für 32 Bit Farbtiefe
video_screen = 1; // Starteinstellung für Fullscreen
level_load ("shooter.wmb");
wait (2);
}
///////////////////////////////
action playermove()
{
pl_mod = my;
pl_energie = 100;
pl_speed_x = 10;
pl_speed_y = 5;
while (pl_energie > 0)
{
my.pl_weg_x = (key_w - key_s) * pl_speed_x * time_step;
my.pl_weg_y = (key_d - key_a) * pl_speed_y * time_step;
c_move (my, vector(pl_weg.x, pl_weg.y, 0), nullvector, GLIDE);
wait(1);
}
} nun bekomme ich beim Testlauf eine Fehlermeldung in zeile 5 "DEFINE undeclared identifer" Kannst Du oder jemand anders mir weiterhelfen?? Habe mir mal eben den ganzen Post angesehen... manch einer mag jetzt denken der ist zu faul nachzulesen. Ich habe mir vor einer Ewigkeit hier meinen Anranzer (zu Recht)abgeholt weil ich wohl zu ungeduldig war auch habe ich böse über die Templates und Conitec hergezogen, aber ich habe nie, und werde es auch nie, erwarten das mir hier ein vollständiger Code geliefert wird! Dazu habe ich viel zu viele Flausen im Kopf wie mein Game aussehen soll. aber mit 49 Jahren lernt man nicht mehr so toll, und ich habe das Gefühl, das sich mit der Version 7 und lite-C einiges geändert hat. Zudem habe ich in manch einer Woche nur 5 - 6 Stunden Zeit für Computer. Ich brauche eine Starthilfe, wenn ich den Anfang erst wieder habe läufts auch wieder Recht langweiliger Roman, aber ich hatte das Gefühl ich müsste dies mal schreiben, sorry...
Last edited by Maschine; 07/30/08 20:05. Reason: Nachtrag
Eine Stimme sprach zu mir:" Lächle und sei froh... es könnte schlimmer kommen". Ich lächelte und war froh... und es kam schlimmer!
|
|
|
Re: lite-C Playerbewegung Problem
[Re: Maschine]
#218823
07/30/08 20:12
07/30/08 20:12
|
Joined: Aug 2003
Posts: 7,440 Red Dwarf
Michael_Schwarz
Senior Expert
|
Senior Expert
Joined: Aug 2003
Posts: 7,440
Red Dwarf
|
Define ist unter lite-c anders als unter c-script, deshalb der fehler, probier mal das:
#DEFINE pl_speed_x 1;
#DEFINE pl_speed_y 2;
#DEFINE pl_speed_z 3;
#DEFINE pl_energie 4;
#DEFINE pl_weg_x 5;
#DEFINE pl_weg_y 6;
#DEFINE pl_weg_z 7;
...
my.skill[pl_weg_x] = (key_w - key_s) * my.skill[pl_speed_x] * time_step;
my.skill[pl_weg_y] = (key_d - key_a) * my.skill[pl_speed_y] * time_step;
c_move (my, vector(my.skill[pl_weg_x], my.skill[pl_weg_y], 0), nullvector, GLIDE);
sorry auch für die späte antwort, ich war aber recht lange beschäftigt  ineffizient meine ich z.b. in deinem (ersten) versuch weil du per IF abgefragt hast ob key_s/w/a/d gedrückt wird. Wie du aber ja schon gelernt hast, kannst du ein paar mikrozyklen rechenleistung sparen indem du keinen vergleich machst, sondern einfach den wert von key_* nimmst - da dieser bei "gedrückt" 1 ergibt - und mit dem speed wert multiplizierst, desweiteren finde ich (wenn es gravitation gibt, wenn nicht dann kannst du diesen part ignorieren) das 2 c_moves besser sind, einen für die bewegung und einen für die umwelteinflüsse, weil es sonst später sehr sehr schwer wird treppen zu steigen oder gar nur ganz leichte steigungen hochzugehen  ansonsten, du lernst fix, sehr gut und weiter so!
"Sometimes JCL reminds me of Notch, but more competent" ~ Kiyaku
|
|
|
Re: lite-C Playerbewegung Problem
[Re: Michael_Schwarz]
#219028
07/31/08 17:57
07/31/08 17:57
|
Joined: Jan 2005
Posts: 74 Deutschland
Maschine
OP
Junior Member
|
OP
Junior Member
Joined: Jan 2005
Posts: 74
Deutschland
|
Moin, habe mal den Code geändert: ///////////////////////////////
#include <acknex.h>
#include <default.c>
///////////////////////////////
#DEFINE pl_speed_x 1;
#DEFINE pl_speed_y 2;
#DEFINE pl_speed_z 3;
#DEFINE pl_energie 4;
#DEFINE pl_weg_x 5;
#DEFINE pl_weg_y 6;
#DEFINE pl_weg_z 7;
///////////////////////////////
ENTITY* pl_mod;
///////////////////////////////
function main()
{
fps_max = 150;
video_mode = 9; // Starteinstellung für 1280 * 1024
video_depth = 32; // Starteinstellung für 32 Bit Farbtiefe
video_screen = 1; // Starteinstellung für Fullscreen
level_load ("shooter.wmb");
wait (2);
}
///////////////////////////////
action playermove()
{
pl_mod = my;
pl_energie = 100;
pl_speed_x = 10;
pl_speed_y = 5;
while (pl_energie > 0)
{
my.skill[pl_weg_x] = (key_w - key_s) * my.skill[pl_speed_x] * time_step;
my.skill[pl_weg_y] = (key_d - key_a) * my.skill[pl_speed_y] * time_step;
c_move (my, vector(my.skill[pl_weg_x], my.[pl_weg_y], 0), nullvector, GLIDE);
wait(1);
}
} Es kommt die gleiche Meckermeldung: [img:left]D:\Eigene Daten\Screenshoot\box.cpt[/img] Ich habe auch andere Varianten ausprobiert, immer das selbe... Auch die Beispiele aus der Hilfe habe ich genau so versucht... es geht nicht! Ich habe die Sybex Edition, da ist ein gedrucktes Handbuch dabei, allerding besteht es Hauptsächlich aus den Workshops von Georg Pirvu, von skills keine Rede. Ich habe auch die A6 (6.6) von Conitec, habe mich beim Neukauf für Sybex entschieden des Handbuches wegen. wenn ich die Hilfe der A6 und der A7 vergleiche, kommt es mir vor als wurde die A7 Hilfe zum großen Teil nur 1 zu 1 kopiert. Oder kann es sein, daß die beiden Dateien #include <acknex.h> #include <default.c> evtl bei mir zerschossen sind? Soweit ich es verstanden habe sind die doch für die Übersetzung wdl/c-script zu lite-c zuständig... HELP! Hmmm, Bild einfügen hat nicht geklappt jedenfalls ist die Meldung genau wie vorher.
Last edited by Maschine; 07/31/08 18:01.
Eine Stimme sprach zu mir:" Lächle und sei froh... es könnte schlimmer kommen". Ich lächelte und war froh... und es kam schlimmer!
|
|
|
Moderated by mk_1, Perro, rayp, Realspawn, Rei_Ayanami, rvL_eXile, Spirit, Superku, Tobias, TSG_Torsten, VeT
|