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 (Quad, miwok, Martin_HH, AndrewAMD, alibaba, dpn), 584 guests, and 1 spider.
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 2 1 2
Mein erstes Spiel und erste probleme #406617
08/25/12 20:14
08/25/12 20:14
Joined: Aug 2012
Posts: 10
S
Spieli Offline OP
Newbie
Spieli  Offline OP
Newbie
S

Joined: Aug 2012
Posts: 10
Hey Leute,
ich hab vor 2 tagen angefangen zu scripten und mein erstes spiel ist einfach ein 2D adventure wo man einen ball durch verschiedene Levels steuert.Den Ball steure ich mit physiks und ich kann noch in der luft springen aber ich will das ich nur einmal springen kann, aber ich weiss nicht wie das geht. Könnt ihr mir bitte helfen?

Schöne Grüße,
euer Spieli

Re: Mein erstes Spiel und erste probleme [Re: Spieli] #406620
08/25/12 21:16
08/25/12 21:16
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
Hi Spieli! Ich denke du musst rausfinden, ob du mit dem Ball in der Luft bist. Wenn das nämlich der Fall ist, würde ich einfach die Sprungtaste sperren oder sowas. Wie ist denn das Level gemacht - also verwendest du z.B. den WED um deine Welt zu bauen - oder wie machst du das?

Weil dann könntest du die Eigenschaft "floor_dist" verwenden, um zu schauen, wie weit du über dem Untergrund bist. Das funktioniert aber nur mit Levelblocks. Wenn du da auch noch Modelle rumstehen hast, dann musst du dir im Handbuch mal die Funktion "c_trace" anschauen - die sieht relativ kompliziert aus, ist aber sehr mächtig.

Wenn du Fragen hast, schreib einfach hier ins Forum smile

Last edited by HeelX; 08/25/12 21:17.
Re: Mein erstes Spiel und erste probleme [Re: HeelX] #406622
08/25/12 22:08
08/25/12 22:08
Joined: Aug 2012
Posts: 10
S
Spieli Offline OP
Newbie
Spieli  Offline OP
Newbie
S

Joined: Aug 2012
Posts: 10
Hi HeelX! ja ich verwende WED zum level bauen. ich werde versuchen dieses "floor_dist" einzubauen und schon wie gesagt arbeite ich mit gamestudio a8 erst seit 2 tagen also will alles noch nicht richtig funktionieren.manchmal kommen so kleine fehler hervor die normalerweise nie da sein dürften.

ich bin auch nur ein junger bursche und kenn mich in der progammier sache noch gar keinen meter aus also kann ich dir nicht so viel über mein spiel sagen, deshalb mache ich einfach das:

also die main datei:

Code:
#include <acknex.h>
#include <default.c>
#include <ackphysx.h>


#define PRAGMA_PATH "Audio"
#define PRAGMA_PATH "Models"
#define PRAGMA_PATH "Scripts"
#define PRAGMA_PATH "Images"
#define PRAGMA_PATH "Shaders"

#include "ballactions.c"

function main()
{
	physX_open();
	level_load("Level01.wmb");
	on_cuu = yimpulse;
	on_cul = xleftimpulse;
	on_cur = ximpulse;
}

action ball()
{
	ent_ball =me;
	physx();
	kamera();
}

und die ballsteuerung:


VECTOR ball_force;
ENTITY* ent_ball;

function yimpulse();
function ximpulse();
function xleftimpulse();


function physx()
{
	
	
	pXent_settype(me, PH_RIGID, PH_SPHERE);
	pXent_setfriction(me, 70);
	pXent_setdamping(me, 10, 10);
	pXent_setelasticity(me, 10);
	
	while(1)
	{
		ball_force.y = -(key_cur = key_cul)*10*time_step;
		ball_force.x = 0;
		ball_force.z = 0;
		pXent_addtorqueglobal(me, ball_force);
		my.y = 0;
		wait(1);
	}
}


function kamera()
{
	while(1)
	{
		camera.x = ent_ball.x;
		camera.y = ent_ball.y -200;
		camera.z = ent_ball.z +50;
		camera.tilt = -20;
		camera.pan = 90;
		camera.arc = 90;
		wait(1);
		
	}
}

function yimpulse()
{
	{
		pXent_addvelcentral(ent_ball, vector(0,0,0250));
	}
	return;
}

function ximpulse()
{

	{
		pXent_addvelcentral(ent_ball, vector(0100,0,0));
		
	}
	return;
}

function xleftimpulse()
{

	{
		pXent_addvelcentral(ent_ball, vector(-0200,0,0));
	
	}
	return;
}



falls fehler drinne sind bitte verbessern und mir sagen!

MfG
Spieli

Last edited by HeelX; 08/26/12 09:21. Reason: bitte das nächste mal [code] und [/code] für Quellcode verwenden!
Re: Mein erstes Spiel und erste probleme [Re: Spieli] #406624
08/26/12 09:24
08/26/12 09:24
Joined: Jul 2001
Posts: 6,904
H
HeelX Offline
Senior Expert
HeelX  Offline
Senior Expert
H

Joined: Jul 2001
Posts: 6,904
Also du hast ja die Funktion yimpulse an die Pfeil-nach-oben Taste gebunden. Drückst du sie, wird die Funktion ausgeführt. Dort führst du pXent_addvelcentral aus. Du könntest jetzt genau dort prüfen, ob die floor_dist von ent_ball kleiner einem gewissen Wert ist, und wenn das so ist, dann ist der Ball auf dem Boden (oder nahe dem Boden) und du führst pXent_addvelcentral aus, um ihn springen zu lassen! Das könnte in etwa so aussehen:

Code:
function yimpulse()
{
	// ist der Ball 16 quants oder weniger nahe dem Boden, dürfen wir springen!
	if (ent_ball->floor_dist < 16) 
	{
		pXent_addvelcentral(ent_ball, vector(0, 0, 250));
	}
}


Re: Mein erstes Spiel und erste probleme [Re: HeelX] #406625
08/26/12 09:56
08/26/12 09:56
Joined: Aug 2012
Posts: 10
S
Spieli Offline OP
Newbie
Spieli  Offline OP
Newbie
S

Joined: Aug 2012
Posts: 10
ja ich habe es geschafft mit hilfe meines bruders dass ich nur einmal springen kann. nur ne anfänger frage: wie kann ich sounds ins spiel einfügen?

Re: Mein erstes Spiel und erste probleme [Re: Spieli] #406648
08/26/12 18:48
08/26/12 18:48
Joined: Jul 2002
Posts: 3,208
Germany
Error014 Offline
Expert
Error014  Offline
Expert

Joined: Jul 2002
Posts: 3,208
Germany
Hey,

schau dir mal die snd_-funktionen an, insbesondere snd_play und snd_loop. Dafür musst du SOUND*-Objekte einfügen, entweder globale, die die Engine für dich initialisiert, zb so:

Code:
//ausserhalb von einer Funktion, und vor dem Code unten
SOUND* mein_sound = "sound.wav"; //"sound.wav" ist der Dateiname

...

//in deiner Funktion:
snd_play(mein_sound,100,0);



Alternativ kannst du solche Sounds auch lokal dynamisch erstellen, das geht mit snd_create. Das ist aber schon etwas schwieriger - für den Anfang (und für kleine Sounddateien) geht das oben schon ganz gut.


Wenn du sehr große Sounddateien hast, ist es oft günstiger, diese mit den media_-Befehlen abzuspielen, das wäre z.B. für Hintergrundmusik ganz günstig. Als kleiner Nachteil "loopen" die aber nicht perfekt.
Falls du das machen willst, brauchst du media_play, etwa so:

Code:
//In deiner Funktion:
media_play("sound.wav",NULL,100);





Für dich vermutlich nicht ganz so wichtig: Beachte, dass MP3-Dateien unangenehme Lizenzbedingungen haben. Daher bietet sich ogg eher an. wav-Dateien kannst du natürlich auch nehmen, die sind aber natürlich etwas größer.

Last edited by Error014; 08/26/12 18:50.

Perhaps this post will get me points for originality at least.

Check out Dungeon Deities! It's amazing and will make you happy, successful and almost certainly more attractive! It might be true!
Re: Mein erstes Spiel und erste probleme [Re: Error014] #406651
08/26/12 21:18
08/26/12 21:18
Joined: Aug 2012
Posts: 10
S
Spieli Offline OP
Newbie
Spieli  Offline OP
Newbie
S

Joined: Aug 2012
Posts: 10
hey,
danke für deine Antwort! ich werde es dann ausprobieren. nur gibt es ein problem und zwar:hab ich mit einem guten Programmierer geschrieben und zwar dass ich zwischen level 1 und level 2 wechsel kann(also wenn ich ans ende von level 1 komme
dann gehe ich automatisch ins nächste level)nur das will nicht ganz funktionieren.


Der Code:

var aktuelles_level = 1;

function lade_neues_level()
{
STRING* nextlevel = "#30";
str_cpy(nextlevel, "level");
str_cat(nextlevel, str_for_num(NULL, aktuelles_level));
str_cat(nextlevel, ".wmb");
error(nextlevel);
level_load(nextlevel);
aktuelles_level = aktuelles_level +1;
}


der fehler ist, ich kann das spiel zwar starten aber da kommt die fehlermeldung das es die level 1 datei nicht gibt.

Irgendwann werde ich auch ein Youtube Video oder Sceenshots von meinem spiel machen!

Last edited by Spieli; 08/26/12 21:22.
Re: Mein erstes Spiel und erste probleme [Re: Spieli] #406710
08/27/12 17:04
08/27/12 17:04
Joined: Jul 2002
Posts: 3,208
Germany
Error014 Offline
Expert
Error014  Offline
Expert

Joined: Jul 2002
Posts: 3,208
Germany
Hey,

STRING-Objekte sind etwas kniffliger als solche Typen wie var, int oder char. Dabei handelt es sich um Objekte, die man "korrekt" erstellen muss. Im letzten Post habe ich was von SOUND-Objekten geschrieben, und zwar, dass die Engine für dich den Sound erstellt, wenn du außerhalb einer Funktion definierst, es aber innerhalb nicht so klappt.
Bei Strings ist das genauso. Du kannst außerhalb von Funktionen schreiben:

Code:
STRING* meinstring = "#30";



Innerhalb von Funktionen musst du aber str_create benutzen - du kannst lokal nur den Zeiger* erstellen, und musst dann mittels der str_create Anweisung getrennt den Auftrag geben, den String im Speicher zu erstellen:

Code:
function meine_funktion() {
STRING* mein_string;
mein_string = str_create("Dies ist mein String!");
error(mein_string);
str_remove(mein_string);
}



Du solltest auch nicht vergessen, nicht mehr benötigte Strings mittels str_remove wieder zu entfernen. Andernfalls bleiben sie im Speicher - Memory leak!

Die einfachste Lösung für dein Problem wäre daher, die Definition von "nextlevel" einfach aus der Funktion auszulagern. Das kann aber auch ein allgemeiner, globaler "tempstring" sein, den du überall wieder verwendest. Das ist am Anfang IMHO einfacher, als stets mit lokalen Strings zu hantieren (was aber vll. eleganter ist).

Code:
var aktuelles_level = 1;
STRING* nextlevel = "#30";

function lade_neues_level()
{
str_cpy(nextlevel, "level");
str_cat(nextlevel, str_for_num(NULL, aktuelles_level));
str_cat(nextlevel, ".wmb");
error(nextlevel);
level_load(nextlevel);
aktuelles_level = aktuelles_level +1;
}



Oder alternativ:

Code:
var aktuelles_level = 1;

function lade_neues_level()
{
STRING* nextlevel;
nextlevel = str_create("#30"); //Würde auch in einer Zeile gehen, ist aber so klarer :)
str_cpy(nextlevel, "level");
str_cat(nextlevel, str_for_num(NULL, aktuelles_level));
str_cat(nextlevel, ".wmb");
error(nextlevel); //hier sollte korrekt "level1.wmb" ausgegeben werden!
level_load(nextlevel);
aktuelles_level = aktuelles_level +1;
str_remove(nextlevel);
}



Übrigens kannst du für aktuelles_level auch einen anderen Typ als var benutzen, z.B. "int" für ganze Zahlen (es gibt doch kein Level 2,323 oder?) oder falls es unter 255 Level bleiben auch char. In dem Fall solltest du aber str_for_int statt str_for_num verwenden.


+++++++++++++

Und wo ich all das geschrieben habe: Ich glaube nicht, dass das dein Problem löst. Die Frage ist, gibt es denn "level1.wmb"? Dein Code verwendet error, d.h. vor dem laden sollte ein Dialogfeld aufgehen, dass den String ausgibt. Passiert das? Und wenn es passiert, was steht in dem Feld - es sollte "level1.wmb" sein.
Deine "level1.wmb"-Datei muss sich im Verzeichnis des Spiels (da, wo auch deine Skriptdatei, die du benutzt, sitzt) befinden. Und achtung, uns interessiert nicht eine ".wmp", wir brauchen die ".wmb"-Datei.


* - das Sternchen "*" hinter dem Typ deutet an, dass es nur ein Zeiger ist - das bedeutet, dass du dort nur die Adresse im Speicher hinterlegst, und gar nicht das Objekt selbst. Bei einem Sound kannst du dir das so vorstellen: Die Engine lädt also deine vll 1 MB große Sound-datei und die befindet sich nun irgendwo im Speicher, und zwar in diesem Beispiel beginnend bei Memory-Block 300. Dann würde der SOUND-Zeiger "mein_sound" nicht diese 1 MB Sounddaten beinhalten, sondern nur die Zahl 300. Da die Engine aber weiß, dass es sich um einen SOUND-Zeiger handelt, weiß sie, dass sie ab dieser Adresse den Sound auslesen kann.
Für Zeiger benutzt man auch "->" statt den Punkt ".", wie du in HeelX Beispielcode oben gesehen hast. Das korrigiert lite-C aber i.d.R. (für alle nicht zu komplexen Codebeispiele) für dich.
Keine Sorge, wenn das noch eher verwirrend klingt! Zeiger sind ein wichtiges Konzept, und man kann eine Menge damit machen, aber man braucht eine Weile um "reinzukommen". Das passiert aber früher oder später von allein, also keine Panik!


Last edited by Error014; 08/27/12 17:09.

Perhaps this post will get me points for originality at least.

Check out Dungeon Deities! It's amazing and will make you happy, successful and almost certainly more attractive! It might be true!
Re: Mein erstes Spiel und erste probleme [Re: Error014] #406711
08/27/12 17:10
08/27/12 17:10
Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
MasterQ32 Offline
Expert
MasterQ32  Offline
Expert

Joined: Nov 2007
Posts: 2,568
Germany, BW, Stuttgart
@error014:
Das Problem wurde schon gelöst. Es lag am falschen Dateinamen. Auch kann man das
Code:
STRING* nextlevel = "#30";

problemlos auch in funktionen verwenden, solange man diesen string nur temporär verwendet (es ist dann für jede funktion der selbe string, den man verwendet, sozusagen eine statische variable)

Gruß Felix


Visit my site: www.masterq32.de
Re: Mein erstes Spiel und erste probleme [Re: MasterQ32] #406728
08/28/12 07:10
08/28/12 07:10
Joined: Aug 2012
Posts: 10
S
Spieli Offline OP
Newbie
Spieli  Offline OP
Newbie
S

Joined: Aug 2012
Posts: 10
ja ich und MasterQ32 haben das Problem gelöst! Ein großes danke an dich MasterQ32!! wink

Gruß Spieli

Page 1 of 2 1 2

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