|
3 registered members (AndrewAMD, Grant, Neb),
908
guests, and 6
spiders. |
|
Key:
Admin,
Global Mod,
Mod
|
|
|
Kamera, Movement, Animation... Wo.OT Hilfe.
#201405
04/08/08 20:16
04/08/08 20:16
|
Joined: Apr 2008
Posts: 144 Germany | Niedersachsen (Lower...
Roxas
OP
Member
|
OP
Member
Joined: Apr 2008
Posts: 144
Germany | Niedersachsen (Lower...
|
Hey Leute, ich hab probleme ohne ende.. gibt es irgendwo ein vernünftiges, gut erklärtes und verständliches Tutorial für Lite-C das erklärt wie man ein Bewegungsscript schreibt, 3rd Person Kamera Script schreibt, und Animationen einbindet? Ich habe es mit dem KH Movement Tutorial versucht, aber ich verstehe einige Sachen nicht.. und genau diese dinge sind dann meist auch nicht sonderlich gut erklärt. bzw für mich verständlich.. Ich hab nen code geschrieben mit mühe und not... und ich hab bisher einige Probleme: -> ich krieg keine Animationen rein.. sobald ich sie einbaue ruckelt das modell was als charakter dienen soll sehr stark. genau so wenig versteh ich die sache mit dem "ent_blend" ... -.- -> Bewegung... wenn ich WASD drücke bewegt er sich zwar in die richtung die ich will, doch sieht das total abgehackt aus.. ich hätte es gerne so das er sich in die richtung dreht und dann läuft, statt einfach abgehackt plötzlich in die richtung zu laufen in die man drückt. (ähnlich wie beim kh script > wies da gemacht wird versteh ich nur mal wieder nicht...) -> physik.. damit meine ich springen/fallen usw -> camera.. wie halte ich die cam davon ab, durch wände zu gehen etc? Hier der Code: #include <acknex.h>
#include <default.c>
////////////////////////////
// Entity's deklarieren
ENTITY* charakter;
////////////////////////////
// Variabeln
var running;
var standing;
var walking;
////////////////////////////
function main()
{
video_mode = 7;
//video_screen = 1;
level_load ("test.wmb");
wait (2);
}
////////////////////////////
// Funktionen
function camera_handle()
{
VECTOR temp; //eigtl nicht mehr benötigt Q_Q
camera.x = charakter.x + fcos (camera.pan,-200);
camera.y = charakter.y + fsin (camera.pan,-200);
camera.z = 150;
camera.tilt = -25;
camera.pan -= mouse_force.x * 10 * time_step;
camera.x = charakter.x + fcos (camera.pan,-200);
camera.y = charakter.y + fsin (camera.pan,-200);
/*vec_set(temp.x,charakter.x); //diente zu testzwecken
vec_sub(temp.x,camera.x);
vec_to_angle(camera.pan,temp.x); */
}
function animation_handle()
{
ent_animate(charakter, "stand", standing, ANM_CYCLE);
standing += 5 * time_step;
}
/////////////////////////////
// Actions
action player_move()
{
charakter = me;
set (charakter, SHADOW);
while(1)
{
camera_handle();
animation_handle();
if(key_w == 1 && key_s == 0 && key_a == 0 && key_d == 0)
{
charakter.pan = camera.pan;
c_move(charakter, vector(12 * time_step, 0, 0), nullvector, GLIDE);
}
if(key_w == 0 && key_s == 1 && key_a == 0 && key_d == 0)
{
charakter.pan = camera.pan - 180;
c_move(charakter, vector(12 * time_step, 0, 0), nullvector, GLIDE);
}
if(key_w == 0 && key_s == 0 && key_a == 1 && key_d == 0)
{
charakter.pan = camera.pan + 90;
c_move(charakter, vector(12 * time_step, 0, 0), nullvector, GLIDE);
}
if(key_w == 0 && key_s == 0 && key_a == 0 && key_d == 1)
{
charakter.pan = camera.pan - 90;
c_move(charakter, vector(12 * time_step, 0, 0), nullvector, GLIDE);
}
if(key_w == 1 && key_s == 0 && key_a == 1 && key_d == 0)
{
charakter.pan = camera.pan + 45;
c_move(charakter, vector(12 * time_step, 0, 0), nullvector, GLIDE);
}
if(key_w == 0 && key_s == 1 && key_a == 1 && key_d == 0)
{
charakter.pan = camera.pan + 135;
c_move(charakter, vector(12 * time_step, 0, 0), nullvector, GLIDE);
}
if(key_w == 0 && key_s == 1 && key_a == 0 && key_d == 1)
{
charakter.pan = camera.pan - 135;
c_move(charakter, vector(12 * time_step, 0, 0), nullvector, GLIDE);
}
if(key_w == 1 && key_s == 0 && key_a == 0 && key_d == 1)
{
charakter.pan = camera.pan - 45;
c_move(charakter, vector(12 * time_step, 0, 0), nullvector, GLIDE);
}
wait(1);
}
}
Iwie komm ich mir ganz schön dumm vor ^^'.. hoffe mir kann jemand helfen. weil ich bisher keine vernünftigen workshops oder tutorials gefunden habe.. bzw. es gibt zwar genug, und auch das kh movement script war sehr hilfreich soweit. aber nya.. ich kriegs nich wirklich ganz auf die reihe.. außerdem ist das kh movement script komplett in englisch, was es nicht gerad einfacher macht, und dazu werden ein paar sachen die ich nicht verstehe (wie zB die sache mit den skills) nicht erklärt.. Wie man wahrscheinich sehen kann scripte ich auch noch nicht sehr lange.. ich hab vor einiger zeit mal ein wenig C-Script geschrieben, aber bin auch nicht zu großen ergebnisen gekommen. bin noch ein ziemlicher anfänger. und alleine komm ich zur zeit nich wirklich weiter.. MfG - Roxas
|
|
|
Re: Kamera, Movement, Animation... Wo.OT Hilfe.
[Re: Roxas]
#201408
04/08/08 20:36
04/08/08 20:36
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Iwie komm ich mir ganz schön dumm vor ^^'... Gibts aber keinen Grund zu. Das Kingdom Hearts Tutorial ist schon fortgeschrittener Stoff. Von einem kurzen Blick auf Deinen Code würde ich mal raten, dass Du noch relativ unerfahren im Programmieren bist. Grundsätzlich -würde ich sagen- gibt es zwei Möglichkeiten für dich. Entweder Du lernst Programmieren von Grund auf. Ein sehr gutes Tutorial ist zum Beispiel das Rudi Spiel von HeelX, zu finden auf http://www.christian-behrenberg.de/projects/Rudi/rudi.html (beschäftigt sich auch mit dem Thema Animation). Da wirst Du grundsätzlich in die Programmierung mit Lite-C eingeführt. Die andere Möglichkeit, wenn dich Programmierung nicht so interessiert, ist ein vorgefertigtes Skript zu nehmen, zum Beispiel die Templates oder einfach mal im Forum suchen, da sollten sich etliche finden. Wenn Du dich selber durchbeissen willst: Schau Dir im Handbuch die Befehle ent_animate (Animieren des Charakters) und c_trace und c_move (für die Kollisionserkennen, also Wand + Kamera Problem) an. Was genau meinst Du denn damit, dass Dein Charakter ruckelt? Das ruckartige Umdregen kriegst Du in den Griff, indem Du den pan Wert der Players langsam änderst, also time_step in einer Schleife aufaddierst / subtrahierst, bis der gewünschte Wert erreicht ist.
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Kamera, Movement, Animation... Wo.OT Hilfe.
[Re: Roxas]
#201421
04/08/08 21:03
04/08/08 21:03
|
Joined: Apr 2008
Posts: 144 Germany | Niedersachsen (Lower...
Roxas
OP
Member
|
OP
Member
Joined: Apr 2008
Posts: 144
Germany | Niedersachsen (Lower...
|
Wow danke für die schnellen antworten ^^
Erst einmal, Ja ich bin ein sehr unerfahrener Programmierer ^^' Aber ich möchte es lernen und bin mir auch bewusst das ich nicht von heute auf morgen super tolle scripte schreiben werde. nur weiß ich auch, das ich mit meim rumprobiern nich wirklich weiter kommen werde. das war ein auslösender faktor dafür das ich diesen post geschrieben hab.
also das mit dem ruckeln meine ich so. Wenn ich die kamera drehe oder ich mich bewege, fängt das modell an, was bewegt wird durch die ganzen c_move anweisungen, zu zittern irgendwie.. als wenn sich in ner rasenden aber doch sehbaren geschwindigkeit die x,y position des charakters hin und her bewegt.
und das mit dem RUDI Workshop.. Ich habs angefangen zu lesen und bin etwa bis seite 15 gekommen. dann stand ich schon wieder vor rätseln ohne ende. zB hab ich nicht verstanden was diese "void" anweisung soll geschweige denn diese ganzen "sys_.." anweisungen die irgendein debug feature einbauen sollen. ehrlihc gesagt hab ichs nicht mal ganz kapiert welcher code denn nun in welches script soll. da stand beispielsweise nur, das man sys.c und sys.h machen soll. und dann kam nen haufen code, ohne zu erklären was der bedeutet und was davon wo rein soll, außerdem ist die datei schreibgeschützt, das heißt ich konnte diesen ganzen unverständlichen code nicht einmal einfach kopieren um mich dem rest des workshops zu widmen.
Ich werd mir mal die von dir gesagten anweisungen c_trace usw zu gemüte führen. nur den Workshop des Rudi Projekts versteh ich nicht wirklich, weil am anfang ziemlich komplizierter code kommt, den ich noch nich mal ansatzweise gesehen hab.
und @pappenheimer: ich schau mir mal das tutorial an, danke ^^. vllt hilft mir das auch weiter.
|
|
|
Re: Kamera, Movement, Animation... Wo.OT Hilfe.
[Re: Roxas]
#201430
04/08/08 22:12
04/08/08 22:12
|
Joined: Jan 2002
Posts: 4,225 Germany / Essen
Uhrwerk
Expert
|
Expert
Joined: Jan 2002
Posts: 4,225
Germany / Essen
|
Versuch doch mal die Zeile "standing += 5 * time_step;" durch "standing = (standing + (5 * time_step)) % 100;" zu ersetzen. Ist das besser?
"void" ist ein besonderer Datentyp. Als Typ des Rückgabewertes bedeutet er, dass die Funktion nichts zurückgibt. Also "void myFunction(int x)" kann keinen Wert zurückgeben, während "function myFunction(int x)" einen Wert vom Type var zurückgeben kann und auch dringend sollte.
Pappenheimers Tutorial ist auch sehr gut und nebenbei auch noch ausserordentlich unterhaltsam. Es ist nur leider in .wdl geschrieben und daher wirst Du ein paar Abweichungen zu Lite-C finden. Für grundsätzliche Dinge tut es auch jedes normal C Tutorial, denn Lite-C ist ja offiziell 100% kompatibel zu Ansi C. Auch die ersten paar Kapitel zu Lite-C im Handbuch sind unbedingt empfehlenswert. Natürlich macht es keinen Sinn sich alle Befehle durczulesen, zumindest aber die Kapitel "Syntax" und "Engine Objekte".
Always learn from history, to be sure you make the same mistakes again...
|
|
|
Re: Kamera, Movement, Animation... Wo.OT Hilfe.
[Re: Roxas]
#201493
04/09/08 13:38
04/09/08 13:38
|
Joined: Apr 2008
Posts: 144 Germany | Niedersachsen (Lower...
Roxas
OP
Member
|
OP
Member
Joined: Apr 2008
Posts: 144
Germany | Niedersachsen (Lower...
|
Hmmm oke Danke erstmal. Ich werd mir die Kapitel mal angucken die du erwähnt hast. Bisher habe ich nur die 24 Lite-C Workshops gemacht, viel herumprobiert und getestet, und denke das ich diese soweit begriffen hab. Das Tutorial von Pappenheimer werd ich mir auch noch einmal genau anschauen. Wo finde ich denn zB gute C-Script Tutorials? Und die Sache mit dem ent_blend will bei mir immer noch nicht funktionieren. Außerdem steh ich jetzt gerad vor nem neuen Problem. Ich habs nu so eingerichtet, das ich je nachdem was ich drücke auf der Tastatur (WASD = Run , WASD + Shift = Walk) eine Variable mit namen "state" mit Inhalt fülle usw.. also >
var state;
var run = 2;
var walk = 1;
var stand = 0;
und dann hab ich if-Abfragen gemacht
if(key_w == 1 && key_s == 0 && key_a == 0 && key_d == 0)
{
if(key_shift == 1){state = walk;} else {state = run;}
charakter.pan = camera.pan;
c_move(charakter, vector(charakter.speed_x * time_step, 0, 0), nullvector, GLIDE);
}
und nen Animations Handling:
function animation_handle()
{
if(state == stand)
{
ent_animate(charakter, "stand", standing, ANM_CYCLE);
standing = (standing + (5 * time_step)) % 100;
}
if(state == walk)
{
ent_animate(charakter, "walk", walking, ANM_CYCLE);
walking = (walking + (5 * time_step)) % 100;
}
if(state == run)
{
ent_animate(charakter, "run", running, ANM_CYCLE);
running = (running + (5 * time_step)) % 100;
}
}Aber wenn ich mich bewege und wieder an halte, dann bleibt der Charakter in der Animation die vorher abgespielt werden sollte. (zB. Running Animation). Wie sag ich der Engine jetzt, das wenn ich nichts drücke -> state = stand; ist. Muss ich jetzt für jeden Button der vor kommt schreiben, wenn ich nichts drücke dann is state = stand; ala: if(key_w == 0 | key_s == 0 | usw....){state = stand;} oder gibts da ne andere Möglichkeit? Greetz Roxas~
|
|
|
|