Gamestudio Links
Zorro Links
Newest Posts
Newbie Questions
by fairtrader. 12/05/23 14:22
Zorro Trader GPT
by TipmyPip. 12/04/23 11:34
Square root rule
by Smallz. 12/02/23 09:15
RTest not found error
by TipmyPip. 12/01/23 21:43
neural function for Python to [Train]
by TipmyPip. 12/01/23 14:47
Xor Memory Problem.
by TipmyPip. 11/28/23 14:23
Training with command line parameters
by TipmyPip. 11/26/23 08:42
Combine USD & BTC Pairs In Asset Loop
by TipmyPip. 11/26/23 08:30
AUM Magazine
Latest Screens
A psychological thriller game
SHADOW (2014)
DEAD TASTE
Tactics of World War I
Who's Online Now
6 registered members (AndrewAMD, Quad, soulman3, Ayumi, steyr, 3run), 631 guests, and 2 spiders.
Key: Admin, Global Mod, Mod
Newest Members
fairtrader, hus, Vurtis, Harry5, KelvinC
19019 Registered Users
Previous Thread
Next Thread
Print Thread
Rate Thread
Page 1 of 4 1 2 3 4
3th Person Kamera/Movement - Verbesserungsvorschläge? #421206
04/13/13 14:16
04/13/13 14:16
Joined: Apr 2013
Posts: 27
L
LucasA Offline OP
Newbie
LucasA  Offline OP
Newbie
L

Joined: Apr 2013
Posts: 27
Hallo,
nach langem lesen und basteln habe ich die Kamera so hinbekommen wie ich es wollte.

-------------
Ist mein erstes Projekt und ich bin Neuling in dem Bereich. Habe hier mal den aktuellen Stand zum Download bereit gestellt. Ist alles enthallten:

Aktueller Stand: 18.04.2013, 01:20 Uhr
Download

Ist nichts besonderes. Es geht mir erst mal nur um die Spieler-Steuerung und die Kameraführung. Ziel soll eine World of Warcraft Steuerung sein.
-------------

Die bisherigen Funktionen der Kamera:
- 3th. person perspektive
- Bei gerückter linker Maustaste in jede Richtung um den Spieler drehen
- Sobald sich der Spieler bewegt, soll die Kamera wieder hinten den Spieler
- Bei gedrückter linker+rechter Maustaste dreht sich der Spieler in Richtung Kamera.
- Zoomfunktion mit Mausrad
- Die Kamera soll nach oben und unten nur bis 90grad gehen.
- Man sollte einen Mindest-Max-Abstand festlegen können
- Kollisionserkennung: Die Kamera soll bei Hindernissen zwischen Kamera und Spieler an den Spieler ranzoomen und wieder rauszoomen wenn das Hindernis verschwunden ist.


Bisherige Spieler-Funktionen:
- Steuerung per "WASD"
- Steuerung per "Pfeil-Tasten"
- Steuerung per "Maus"
- Mit gedrückter linker und rechter Maustaste kann der Spieler gesteuert werden.
- Mit gedrückter rechter Maustaste kann der Spieler gedeht werden.
- Mit gedrückter rechter Maustaste und "A, D, CUL oder CUR" kann der spieler seitwärts gehen.

Da ich aber ganz neu in der Welt der Programmierung bin, habe ich sicher das eine oder andere suboptimal gelöst.

Hat vielleicht jemand Verbesserungsvorschläge um den Code zu optimieren? Oder um die eine oder andere Funktion zu verbessern oder zu ergänzen?

ToDo-Liste:

- Irgendwas stimmt auf jeden Fall schon mal nicht mit der links-rechts Drehung des Spielers. Es sieht so aus als wenn die Kamera da immer nen kleinen rucker drin hat.

- Der Spieler soll mit 1 Klick der Maustaste 4 automatisch gerade aus laufen. Aus dem aumatomatisch laufen Modus soll er rauskommen wenn: Maustaste 4 erneut geklickt wird oder man den spieler mit gedrückter linker+rechter maustaste manuell steuert oder man "W, S oder die Pfeiltasten vor, zurück" nutzt.
Funktioniert nur sporadisch.


- Die Kamera ist etwas zu star. Beispiel: Wenn man sich um den Spieler mit gedrückter linker Maustaste bewegt und dann anfängt zu gehen, ist die Kamera sofort hinter dem Spieler. Sie soll auch hinter dem Spieler sein aber eine art Fade effekt, so das die Kamera flüssiger sich wieder hinter den Spieler bewegt wäre besser.

- Spingen muss noch eingebaut werden

- Wenn der Spieler seitwärts geht, also mit gedrückter rechter Maustaste + "A, D, CUR oder CUL" stimmt was nicht, da der Spieler dauerhaft in die jeweilige Richtung läuft auch wenn die Maustaste losgelassen wurde. Erst durch erneutes klicken der rechten Maustaste hört er auf. Das ist nicht so gedacht.

- Wenn der Spieler mit linker+rechter Maustaste gesteuert wird soll der Mauszeiger unsichtbar werden.

- Die Fensterfunktionen (Minimieren und Maximieren) fehlen.

- Bei klick auf die linke und/oder rechte Maustaste soll der Mauszeiger das Spiel im Fenstermodus nicht verlassen können.

- Animationen den richtigen Aktionen zuweisen.

Re: 3th Person Kamera - Verbesserungsvorschläge? [Re: LucasA] #421318
04/15/13 13:32
04/15/13 13:32
Joined: Apr 2013
Posts: 27
L
LucasA Offline OP
Newbie
LucasA  Offline OP
Newbie
L

Joined: Apr 2013
Posts: 27
Gibts nichts zu bemängeln an meinem Code?
Kann mir nicht vorstellen das mein erster Code ganz ohne Mängel sein soll laugh

Re: 3th Person Kamera - Verbesserungsvorschläge? [Re: LucasA] #421320
04/15/13 13:41
04/15/13 13:41
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
Hi Lucas!

Bei solchen Sachen ist eine kleine Demo am hilfreichsten. Bei ner Kamera kommt es ja auf das Gefühl an.

Und wenn man das nicht schnell in einer Demo austesten kann, wirst du wohl vergeblich auf Feedback warten müssen. Wenn ich das z.B. jetzt testen müsste, dann müsste ich mir erstmal nen Spielercode zusammenwürfeln, da ich im Moment gar nichts in diese Richtung mache smile

Also, wäre toll, wenn du eine kleine Demo anbieten könntest, dann kriegst du auch dein Feedback wink

Re: 3th Person Kamera - Verbesserungsvorschläge? [Re: HeelX] #421326
04/15/13 15:51
04/15/13 15:51
Joined: Apr 2013
Posts: 27
L
LucasA Offline OP
Newbie
LucasA  Offline OP
Newbie
L

Joined: Apr 2013
Posts: 27
Hallo HeelX,
ok, da ist was dran laugh
Sorry, bin noch neu in dem Bereich.

Ok, habe mal alles gepackt und zum Download bereit gestellt:

Download

Ist wie gesagt mein erstes Projekt und ich habe bisher keine Programmier Erfahrung. Ist bisher nur ein mini Level ohne was besonderes. Geht mir aktuell erst mal um die Spielersteuerung und Kameraführung. Da es mein erstes Projekt ist, ist der Code sicher nicht Perfekt, darum die Frage hier was ich optimieren könnte, sollte....ect...

Der TestDummy kann per "WASD", "Pfeiltasten" und per "Maus" gesteuert werden. Springen kann er noch nicht, soweit war ich noch nicht. Beim seitwärts gehen kommt keine Animation, weil der Dummy dafür keine hat laugh

Mein Ziel ist eine World of Warcraft Steuerung. Da diese ja sicher von den meisten Gamern in Online Games gewohnt ist laugh

Für Tipps was ich besser machen kann oder ändern sollte wäre ich dankbar laugh Aber bitte immer dran denken ich bin neuling laugh

Last edited by LucasA; 04/15/13 15:58.
Re: 3th Person Kamera - Verbesserungsvorschläge? [Re: LucasA] #421340
04/15/13 18:56
04/15/13 18:56
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
Also erst einmal für das erste vorgestellte Projekt schonmal was Schönes smile

Ich würde versuchen, die XYZ-Werte der Kamera, sowie die pan und tilt Werte der Kamera zu glätten. Schau dir mal die Funktion smooth an. Dann ist das alles viel glatter und eventuell löst sich dein links/rechts Ruckler damit auf. Versuche aber nichtsdestotrotz mal in der Kamerafunktion proc_mode = PROC_LATE; in der while-Schleife direkt zu begin nach dem while(1) zu setzen.

Ansonsten kann ich die Kamera nur rauf und runter bewegen, wenn ich laufe.

Mit dem Mauszeiger kannst du das ja so lösen:

Code:
if (mouse_left || mouse_right)
	mouse_mode = 0; // aus
else
	mouse_mode = 4; // an


Re: 3th Person Kamera - Verbesserungsvorschläge? [Re: HeelX] #421354
04/16/13 00:28
04/16/13 00:28
Joined: Apr 2013
Posts: 27
L
LucasA Offline OP
Newbie
LucasA  Offline OP
Newbie
L

Joined: Apr 2013
Posts: 27
Danke dir blush

proc_mode = PROC_LATE, habe ich eingefügt. Die Beschreibung dazu klingt logisch laugh

Die Smooth-Funktion habe ich getestet. Das Ruckeln würde nur verschwinden wenn ich es auf mind. 0.8 stelle. Was aber zur folge hätte, das sich der Spieler viel zu langsam dreht. Werde aber noch einwenig mit der Smooth Funktion rumspielen.

mouse_mode = 0; sollte ja laut Beschreibung den Mauszeiger deaktivieren. Leider deaktiviert er nur jede Art von Mausklick. Der Mauszeiger ist aber weiterhin sichtbar. Soll das so sein oder sollte der Mauszeiger unsichtbar sein?

Re: 3th Person Kamera - Verbesserungsvorschläge? [Re: LucasA] #421356
04/16/13 05:26
04/16/13 05:26
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
Originally Posted By: LucasA
Die Smooth-Funktion habe ich getestet. Das Ruckeln würde nur verschwinden wenn ich es auf mind. 0.8 stelle. Was aber zur folge hätte, das sich der Spieler viel zu langsam dreht.
Nein, ich meinte dass du es auf die Kamera - nicht auf den Spieler - anwenden sollst.

Originally Posted By: LucasA
mouse_mode = 0; sollte ja laut Beschreibung den Mauszeiger deaktivieren. Leider deaktiviert er nur jede Art von Mausklick. Der Mauszeiger ist aber weiterhin sichtbar. Soll das so sein oder sollte der Mauszeiger unsichtbar sein?
Im Fenstermodus, ja, im Vollbildmodus ist er nicht sichtbar. Das hat was mit Windows zu tun. Im Fenstermodus musst du dann zusätzlich noch mouse_pointer = 0 setzen. Soweit ich weiß funktioniert aber mouse_left/mouse_right auch bei mouse_mode = 0; lediglich die Entityevents funktionieren dann nicht. Wenn du mouse_mode anhaben willst, aber keinen cursor sehen willst, dann musst du dann wie gesagt im Fenstermodus mouse_pointer = 0 setzen und im Vollbildmodus in mouse_map eine RGBA Bitmap reinladen, die einen leeren Alphakanal hat.

Last edited by HeelX; 04/16/13 05:26.
Re: 3th Person Kamera - Verbesserungsvorschläge? [Re: HeelX] #421398
04/16/13 14:56
04/16/13 14:56
Joined: Apr 2013
Posts: 27
L
LucasA Offline OP
Newbie
LucasA  Offline OP
Newbie
L

Joined: Apr 2013
Posts: 27
Ah, ok, verstehe. Der Mauszeiger tut nun das was er soll crazy

Was ist denn an diesem Codeauszug falsch?

Ziel: Bei Drücken der Maustaste 4 soll der Spieler automatisch laufen/gehen. Bei erneutem drücken der Maustaste 4 soll er stehen bleiben.

Es funktioniert auch allerdings nur sporadisch. Verstehe nicht wo der Fehler liegen soll frown

Code:
// Maustasten 4 und 5 definieren
#define mouse_4 (GetKeyState(5) > 1)
#define mouse_5 (GetKeyState(6) > 1)

#define AUTO_RUN skill2 // Automatisch laufen 0=aus, 1=an

function fAutoRun() {
	my.AUTO_RUN = 0;
	
	while(1) {
		// Autorun
		if (mouse_4) {
			if (my.AUTO_RUN)
				my.AUTO_RUN = 0;
			else
				my.AUTO_RUN = 1;
		}
		
		if (my.AUTO_RUN) {
			vecPlayerMoveSpeed.x = (RUN_SPEED - key_shift * WALK_SPEED) * time_step;
			vecPlayerMoveSpeed.x -= (RUN_BACK_SPEED - key_shift * WALK_BACK_SPEED) * time_step;
		}
		
		// Bewegen des Spielers mit Kollisionserkennung. dabei werden alle passierbaren Objekte ignoriert und dafür gesorgt, dass der Spieler an Kanten entlanggleitet.
		c_move(me, vecPlayerMoveSpeed.x, nullvector, IGNORE_PASSABLE | IGNORE_PASSENTS | GLIDE);
	}
}



Wenn "mouse_4" geklickt wird, dann wird geprüft ob "my.AUTO_RUN" auf 1 steht. Wenn ja, dann auf 0 setzten. wenn nein, dann auf 1 setzten. Wenn "my.AUTO_RUN" = 1 dann laufe und laufe und laufe und laufe......

Oder hab ich da einen Denkfehler?

Last edited by LucasA; 04/16/13 15:03.
Re: 3th Person Kamera - Verbesserungsvorschläge? [Re: LucasA] #421399
04/16/13 15:06
04/16/13 15:06
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Kartoffel Offline
Expert
Kartoffel  Offline
Expert

Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
das problem liegt darin, dass die if jeden frame gecheckt wird, und du das automatische laufen immer an und aus stellst solange du die taste hältst.

die tasten der windows-api haber aber ein spezielles verhalten, das man in dem fall glab ich ausnutzen könnte.
Ich werd das schnell mal ausprobieren...

funktioniert, ich werde gleich ein kleines codebeispiel posten.


POTATO-MAN saves the day! - Random
Re: 3th Person Kamera - Verbesserungsvorschläge? [Re: Kartoffel] #421402
04/16/13 15:33
04/16/13 15:33
Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
Kartoffel Offline
Expert
Kartoffel  Offline
Expert

Joined: Jun 2009
Posts: 2,210
Bavaria, Germany
hier ein funktionstüchtiges Beispiel.
Es nutzt das spezielle verhalten der tasten unter windows:

nicht gedrückt (wert = 0) ->
gedrückt (wert > 1) ->
nicht gedrückt (wert = 1) ->
gedrückt (wert > 1) ->
nicht gedrückt (wert = 0) (wieder am anfang)

Code:
#include <acknex.h>

// --- Das Wichtige vvv

#include <windows.h>

#define mouse_4 (GetKeyState(5) > 1) // status (1 oder 0) der 4. maustaste
#define mouse_5 (GetKeyState(6) > 1) // status (1 oder 0) der 5. maustaste

var _M4_toggle_var = 0; // hilfsvariable zum resetten
var _M5_toggle_var = 0; // hilfsvariable zum resetten
#define mouse_4_toggle ((GetKeyState(5) > 0) == _M4_toggle_var) // status (1 oder 0) der mit der 4. maustaste an und ausgeschaltet werden kann
#define mouse_5_toggle ((GetKeyState(6) > 0) == _M5_toggle_var) // status (1 oder 0) der mit der 5. maustaste an und ausgeschaltet werden kann

#define mouse_4_toggle_reset if(mouse_4_toggle) _M4_toggle_var = 1 - _M4_toggle_var // setzt mouse_4_toggle auf 0 zurück
#define mouse_5_toggle_reset if(mouse_5_toggle) _M5_toggle_var = 1 - _M5_toggle_var // setzt mouse_5_toggle auf 0 zurück

// --- Das Wichtige ^^^

void main()
{
	fps_max = 60;
	
	mouse_4_toggle_reset; // beide toggles auf 0 setzen
	mouse_5_toggle_reset;
	
	while(1)
	{
		DEBUG_VAR(mouse_4_toggle, 20);
		DEBUG_VAR(mouse_5_toggle, 40);
		
		DEBUG_VAR((var)GetKeyState(5), 80);
		DEBUG_VAR((var)GetKeyState(6), 100);
		
		if(key_enter)
		{
			mouse_4_toggle_reset; // beide toggles auf 0 setzen
			mouse_5_toggle_reset;
		}
		
		wait(1);
	}
}



mouse_4_toggle und mouse_5_toggle geben eine variable zurück, die mit den tasten immer zwischen 1 und 0 geschalten werden kann.

Da die variablen über windows laufen, werden sie auch außerhalb der Applikation (selbst wenn sie nicht geöffnet ist) getoggelt,
deshalb hab ich die reset-funktionen eingebaut. Die sind auch hilfreich, wenn du die variablen resetten willst sobald das spiel startet,
sodass man das automatische Laufen nicht schon im menü aktiviert und im spiel sofort losrennt.

Ich hoffe das ist jetzt nicht zu kompliziert geworden...

Last edited by Kartoffel; 04/16/13 15:40. Reason: so much edits

POTATO-MAN saves the day! - Random
Page 1 of 4 1 2 3 4

Moderated by  HeelX, Lukas, rayp, Rei_Ayanami, Superku, Tobias, TWO, VeT 

Gamestudio download | chip programmers | Zorro platform | shop | Data Protection Policy

oP group Germany GmbH | Birkenstr. 25-27 | 63549 Ronneburg / Germany | info (at) opgroup.de

Powered by UBB.threads™ PHP Forum Software 7.7.1