|
Re: Ich bin zu dumm ;-)
[Re: Tirti]
#439183
03/28/14 09:44
03/28/14 09:44
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
VECTOR temp;
var camera_zoom_dist = 384;
action move_cam()
{
set(my,UNLIT | PASSABLE);
while(1)
{
vec_zero(temp);
if(!mouse_right)
{
if(mouse_pos.x < 16 || key_cul) temp.y = 8;
if(mouse_pos.x > screen_size.x-16 || key_cur) temp.y = -8;
if(mouse_pos.y < 16 || key_cuu) temp.x = 8;
if(mouse_pos.y > screen_size.y-16 || key_cud) temp.x = -8;
vec_rotate(temp,my.pan);
vec_scale(temp,time_step);
vec_add(my.x,temp);
}
else my.pan -= 8*mouse_force.x*time_step;
camera.pan = my.pan;
camera.tilt = -65;
camera_zoom_dist = clamp(camera_zoom_dist+mickey.z*0.5,64,512);
vec_set(camera.x,vector(-camera_zoom_dist,0,0));
vec_rotate(camera.x,camera.pan);
vec_add(camera.x,my.x);
wait(1);
}
}
void main()
{
fps_max = 60;
level_load(NULL);
ent_create(SPHERE_MDL,vector(0,0,32),move_cam);
mouse_mode = 4;
var i;
for(i = 0; i < 100; i++)
{
ent_create(CUBE_MDL,vector((random(2)-1)*512,(random(2)-1)*512,0),NULL);
}
}
Jetzt funktioniert's. Der Fehler war offenbar in Zeile vec_scale(my.x,time_step); welche natürlich vec_scale(temp,time_step); lauten muss.
"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual Check out my new game: Pogostuck: Rage With Your Friends
|
|
|
Re: Ich bin zu dumm ;-)
[Re: Superku]
#439188
03/28/14 10:38
03/28/14 10:38
|
Joined: Mar 2014
Posts: 25
Tirti
OP
Newbie
|
OP
Newbie
Joined: Mar 2014
Posts: 25
|
Ich will ehrlich sein, du bist mein Held!!! Habe das jetzt so abgeändert
VECTOR temp;
camera.tilt = -35;
var camera_zoom_dist = 200;
action move_c()
{
set(my,UNLIT | PASSABLE);
while(1)
{
vec_zero(temp);
if(!mouse_right)
{
if(mouse_pos.x < 16) temp.y = 8;
if(mouse_pos.x > screen_size.x-16) temp.y = -8;
if(mouse_pos.y < 16) temp.x = 8;
if(mouse_pos.y > screen_size.y-16) temp.x = -8;
vec_rotate(temp,my.pan);
vec_scale(temp,time_step);
vec_add(my.x,temp);
}
else my.pan -= 8*mouse_force.x*time_step;
camera.pan = my.pan;
camera_zoom_dist = clamp(camera_zoom_dist+mickey.z*0.5,64,512);
vec_set(camera.x,vector(-camera_zoom_dist,0,0));
vec_rotate(camera.x,camera.pan);
vec_add(camera.x,my.x);
wait(1);
}
}
So macht es genau das was ich will. Wenn ich an den Rand fahre, fährt die Camera in die Richtung. Zoom klappt wie es soll Und, wenn ich den Camera Pan verändere, kann ich dennoch Zoome und die Camera fährt am Rand genau da in wohin sie es soll. Muss halt noch den clamp für den Zoom anpassen sobald ich genau weis wie der Bereich sein soll. Darf ich dir kurz erläutern wie ich das verstanden habe und du sagst mir ob das richtig istß Würde mir echt helfen 1. klar Vector "temp" erstellen 2. die erstellte Entity unsichtbar und passierbar machen 3. Vector "temp" pro durchlauf wieder mit 0en auffüllen 4. wenn rechte Mausstaste nicht gedrückt grob wenn maus Rand berührt dann setzte temp.x bzw. y auf 8 bzw -8 5. rotiere temp um pan von der entity 6. (verstehe ich nicht) wieso werden hier alle 3 Werte mal time_step genommen? 7. Entity X + Vector "temp" = entity.x (auch das geht mir nicht auf) Der rest, also ab else betrifft j nur den Zoom oder? Danke Superku, bin der festen Überzeugung das ich dafür Monate gebraucht hätte Grüße Tirti
|
|
|
Re: Ich bin zu dumm ;-)
[Re: Tirti]
#439189
03/28/14 10:44
03/28/14 10:44
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Freut mich, wenn du nun etwas hast, womit du arbeiten kannst.
Zu 6.: Nahezu alle nicht-einmaligen Bewegungen/ Wertänderungen sollten mit time_step multipliziert werden. Umso höher die Framerate ist, desto kleiner ist time_step, was darin resultiert, dass die Entity/ der Wert auf allen PCs (in etwa) die gleiche Strecke zurücklegt/ Veränderung erfährt, und das unabhängig von der Bildwiederholrate (bspw. würde x++; auf schnellen PCs viel schneller wachsen als auf langsamen, sprich schreibe stattdessen x += 1*time_step; ).
Zu 7.: Was dir darin nicht klar ist, weiß ich leider nicht. Du willst doch my.x verändern (um indirekt die Kamera zu verschieben), also musst du etwas auf diesen Vektor addieren. Und das ist bei uns gerade temp, mit time_step skaliert.
"Falls das Resultat nicht einfach nur dermassen gut aussieht, sollten Sie nochmal von vorn anfangen..." - Manual Check out my new game: Pogostuck: Rage With Your Friends
|
|
|
Re: Ich bin zu dumm ;-)
[Re: Superku]
#439191
03/28/14 10:52
03/28/14 10:52
|
Joined: Mar 2014
Posts: 25
Tirti
OP
Newbie
|
OP
Newbie
Joined: Mar 2014
Posts: 25
|
Jetzt wird nen Schuh draus. Habe zwar in meinem Buch schon mal die Erläuterung zu time_step nachgelesen. Dachte aber das sich das nur auf Bewegungen von Entitys (also Animationen) bezieht. Was mir aber jetzt beim lesen deiner Erklärung aufgefallen ist ( und das obwohl ich meine Entity "dummy" genannt habe) benutze ich dummy ja quasi als Joystick für die Camera. Also habe ich eine Entity Bewegung die ich über time_step normalisiere unabhängig der PC Performance.
*klatsch auf Stirn*
Sehe schon, das wird noch ein langer weg bis ich mal etwas Spielbares habe. War mir vom Ablauf nur nicht sicher, dachte bevor ich mi über irgendwas tiefer Gedanken mache, sollte die Camera bzw. Moussteuerung so funktionieren wie es soll. Sonst stelle ich nachher fest das alles super, aber nicht bedienbar ist. Also dachte ich mir, erst die Bedienung dann Level und Co.
Grüße Tirti
Last edited by Tirti; 03/28/14 10:52.
|
|
|
Re: Ich bin zu dumm ;-)
[Re: Tirti]
#439195
03/28/14 12:10
03/28/14 12:10
|
Joined: Feb 2010
Posts: 886
Random
User
|
User
Joined: Feb 2010
Posts: 886
|
Das kriegst du schon hin. Überlege dir was du genau machen willst und arbeite es schrittweise ab.
Nenne dich niemals, selbst dumm!
Last edited by Random; 03/28/14 12:10.
|
|
|
|