0 registered members (),
1,209
guests, and 0
spiders. |
Key:
Admin,
Global Mod,
Mod
|
|
|
Re: Ich bin zu dumm ;-)
[Re: Tirti]
#439047
03/25/14 19:54
03/25/14 19:54
|
Joined: May 2005
Posts: 2,713 Lübeck
Slin
Expert
|
Expert
Joined: May 2005
Posts: 2,713
Lübeck
|
Formatiere mal deinen Code ordentlich (über das was das bedeutet kann man super streiten, aber es sollte zumindest konsistent sein). Ich bin sehr dafür Geschweifte Klammern immer übereinander zu machen, so wie es bei dir schon ist und dann aber nicht weiter eingerückt, als das while oder if oder was auch immer. Auch finde ich es schöner bei sowas wie if (blubb) das Leerzeichen zwischen dem if und der Klammer nicht zu machen. Du machst es aktuell bei dem if, aber nicht bei dem while, also lass es gleich überall weg. Bei deinem Code weiter oben steht else { if(irgendwas) { } }, stattdessen kann man auch einfach schreiben: else if(irgendwas) { }, ist wie ich finde deutlich übersichtlicher.
Für deine Probleme mit der Bewegung musst du etwas mit Vektoren herumrechnen, was eigentlich ganz einfach ist, vor allem mit Gamestudios Funktionen. In deinem Fall willst du ja offenbar die Kamera abhängig von der Mausbewegung immer nach Vorne/Hinten bzw Links/Rechts bewegen und zwar immer in die entsprechende Richtung aus Sicht der Kamera. Dazu kannst du dir temporär einen Vektor für die Bewegung aus Sicht der Kamera bauen und musst diesen dann aber aus dem Koordinatensystem der Kamera in das der Welt transformieren. Da es nur eine Richtung ist Spielt dabei die Position der Kamera keine Rolle, sondern nur die Rotation. Du musst also diesen Vektor genauso rotieren wie die Kamera. Vektoren kann man mit ein bisschen unübersichtlichem sin/cos rotieren, in Gamestudio gib es da vec_rotate(vector, camera.pan). Das Ergebniss kannst du dann auf die Position der Kamera Addieren.
|
|
|
Re: Ich bin zu dumm ;-)
[Re: Slin]
#439049
03/25/14 20:14
03/25/14 20:14
|
Joined: Mar 2014
Posts: 25
Tirti
OP
Newbie
|
OP
Newbie
Joined: Mar 2014
Posts: 25
|
Ok, auch wenn jetzt sicher alle denken ich bin doof, ich tue es weil es mir den Anschein macht, das es hier für jeden das normalste der Welt ist. Dürfte ich bitten das mir jemand den Code Schnipsel anhand meines Codes ergänzt? Es geht nicht darum, das ich es einfach jemand anders machen lassen möchte. Will eher versuchen anhand des Ergebnisses den Aufbau und die Berechnung bzw. wie man es macht zu verstehen.
function move_cam()
{
while(1)
{
if (mouse_right == 1)
{
camera.pan -= mickey.z*time_step;
camera.x += mouse_force.y;
camera.y += mouse_force.x;
}
else
{
camera.arc -= mickey.z*time_step;
}
wait(1);
}
}
Vorab ein danke, Tirti
|
|
|
Re: Ich bin zu dumm ;-)
[Re: Tirti]
#439058
03/26/14 04:44
03/26/14 04:44
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Vorausgesetzt, deine Spielfigur hat den bereits definierten "player" Pointer zugewiesen, dann versuch es mal mit dem folgenden Code:
VECTOR newCamx;
var camera_zoom_dist = 384;
void move_cam()
{
while(1)
{
if(player)
{
camera_zoom_dist = clamp(camera_zoom_dist+mickey.z*0.5,64,512);
camera.pan -= mouse_right*mouse_force.x*time_step;
camera.tilt = -65;
vec_set(camera.x,vector(-camera_zoom_dist,0,0));
vec_rotate(camera.x,camera.pan);
vec_add(camera.x,player.x);
}
wait(1);
}
}
Das Problem mit Slins Code dürfte sein, dass der lokale und temporäre movedir Vektor nicht (automatisch) auf 0 initialisiert wird, wie das bei globalen Vektoren der Fall ist.
"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: Tirti]
#439125
03/27/14 09:30
03/27/14 09:30
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Mit einer unsichtbaren Entity sollte das relativ einfach sein. Probier doch mal etwas wie folgt (funktioniert vllt nicht auf Anhieb):
VECTOR temp;
var camera_zoom_dist = 384;
action move_cam()
{
set(my,UNLIT | PASSABLE);
while(1)
{
vec_zero(temp);
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(my.x,time_step);
vec_add(my.x,temp);
my.pan -= mouse_right*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);
}
}
Damit solltest du die camera mittels Pfeiltasten oder Mauszeiger nahe Bildschirmrand bewegen, mit der rechten Maustaste rotieren und mit dem Mausrad zoomen können.
"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]
#439156
03/27/14 20:07
03/27/14 20:07
|
Joined: Sep 2003
Posts: 6,861 Kiel (Germany)
Superku
Senior Expert
|
Senior Expert
Joined: Sep 2003
Posts: 6,861
Kiel (Germany)
|
Mit einer unsichtbaren Entity sollte das relativ einfach sein. Daher auch "action".
"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
|
|
|
|