Spiele-Idee
Übersicht BlitzBasic Beginners-CornerGehe zu Seite 1, 2, 3, 4 Weiter
SnadeBetreff: Spiele-Idee |
Sa, Jan 03, 2009 20:52 Antworten mit Zitat |
|
---|---|---|
Also ich hab mir die Robsite TuT's durchgelesen und im 10. Kapitel stand das man jetz so weit waehre ein spiel zu schreiben. Natuerlich dachte ich da nich an einen High-End 3D Shooter. Aber mir faellt nichts ein was ich machen koennte. Weis jemand was man mit diesen kentnissen machen koennte? Hat jemand vieleicht einen guten beispiel code oder weis jemad wo ich fuer meine ketnisse gute her kriege? Die ich mir bei den samples von Blitz Basic 3D angeguckt habe da sind so lange functions drinne die versteh ich nich^^ (waren natuerlich 2D samples).
Dann hab ich noch eine Frage ich hab ein Menu gebastelt das hat Start und Ende. Ende beendet das Programm klappt soweit auch ganz gut! aber der Start button sollte eine animiertes bild anzeigen das vom Robsite TuT "8. Bilder anzeigen" hab eine Function gemacht geht aber ihrgendwie nicht auf der Robsite gabs kein beispiel dazu. Der fehler der kommt ist "Illegal Memory Address" Hier mal der Code Code: [AUSKLAPPEN] Function Frame1()
Repeat For I=0 To 11 DrawImage trooper, 200,100,I Next Until KeyHit(4) End Function Graphics 640,480,32,1 SetBuffer BackBuffer() start = LoadImage("gfx\start.png") maus = LoadImage("gfx\maus.png") ende = LoadImage("gfx\Ende.png") head = LoadImage("gfx\head.png") trooper = LoadAnimImage("gfx\trooper.png",48,52,0,12) ; Transparente Farbe festlegen (gruen). MaskImage start, 0, 255, 0 MaskImage maus, 0, 255, 0 MaskImage ende, 0, 255, 0 MaskImage head, 0, 255, 0 MaskImage trooper, 0, 255, 0 Color 0,255,0 Repeat Cls DrawImage start, 180,50 DrawImage ende, 180,135 DrawImage maus, MouseX(),MouseY() If ImagesCollide(maus, MouseX(), MouseY(), 0, start, 180, 50, 0) If MouseDown(1) Then Frame1() If ImagesCollide(maus, MouseX(), MouseY(), 0, ende, 180, 135, 0) If MouseDown(1) Then End Flip Until KeyHit(1) End mfg. Snade |
||
- Zuletzt bearbeitet von Snade am So, Jan 04, 2009 11:26, insgesamt einmal bearbeitet
Eingeproggt |
Sa, Jan 03, 2009 20:55 Antworten mit Zitat |
|
---|---|---|
Steht das eigentlich schon in den FAQ? Den Fehler den du gemacht hast macht jeder irgendwann mal
Global ist die Lösung. mfG, Christoph. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Snade |
Sa, Jan 03, 2009 23:17 Antworten mit Zitat |
|
---|---|---|
so wie ich das aus aus der Hilfe FQA interpretiert habe muss es so aus sehen oder?
Code: [AUSKLAPPEN] Function Frame1()
Repeat For I=0 To 11 DrawImage trooper, 200,100,I Next Until KeyHit(4) End Function Global Frame1 Graphics 640,480,32,1 SetBuffer BackBuffer() start = LoadImage("gfx\start.png") maus = LoadImage("gfx\maus.png") ende = LoadImage("gfx\Ende.png") head = LoadImage("gfx\head.png") trooper = LoadAnimImage("gfx\trooper.png",48,52,0,12) ; Transparente Farbe festlegen (blau). MaskImage start, 0, 255, 0 MaskImage maus, 0, 255, 0 MaskImage ende, 0, 255, 0 MaskImage head, 0, 255, 0 MaskImage trooper, 0, 255, 0 Color 0,255,0 Repeat Cls DrawImage start, 180,50 DrawImage ende, 180,135 DrawImage maus, MouseX(),MouseY() If ImagesCollide(maus, MouseX(), MouseY(), 0, start, 180, 50, 0) If MouseDown(1) Then Frame1() If ImagesCollide(maus, MouseX(), MouseY(), 0, ende, 180, 135, 0) If MouseDown(1) Then End Flip Until KeyHit(1) End habs so gemacht kommt die gleiche Fehlermeldung *nicht hauen wenn ich falsch gemacht hab^^* |
||
the FR3AK |
Sa, Jan 03, 2009 23:23 Antworten mit Zitat |
|
---|---|---|
Vielleicht existiert die Bilddatei nicht? | ||
Eingeproggt |
Sa, Jan 03, 2009 23:29 Antworten mit Zitat |
|
---|---|---|
Weiß ned woher du das hast, aber so gehörts bestimmt nicht, ich meinte es so:
Code: [AUSKLAPPEN] Global trooper = LoadAnimImage("gfx\trooper.png",48,52,0,12)
|
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Snade |
So, Jan 04, 2009 10:53 Antworten mit Zitat |
|
---|---|---|
achso dachte du meinst mit Global die Function
werds gleich mal probieren [EDIT1] ne das wahr nich der fehler wenn ich so mache: Code: [AUSKLAPPEN] Function Frame1()
Repeat For I=0 To 11 DrawImage trooper, 200,100,I Next Until KeyHit(4) End Function Global Frame1 Graphics 640,480,32,1 SetBuffer BackBuffer() start = LoadImage("gfx\start.png") maus = LoadImage("gfx\maus.png") ende = LoadImage("gfx\Ende.png") head = LoadImage("gfx\head.png") Global trooper = LoadAnimImage("gfx\trooper.png",48,52,0,12) ; Transparente Farbe festlegen (blau). MaskImage start, 255, 255, 255 MaskImage maus, 255, 255, 255 MaskImage ende, 255, 255, 255 MaskImage head, 255, 255, 255 MaskImage trooper, 255, 255, 255 Color 0,255,0 Repeat Cls DrawImage start, 180,50 DrawImage ende, 180,135 DrawImage maus, MouseX(),MouseY() If ImagesCollide(maus, MouseX(), MouseY(), 0, start, 180, 50, 0) If MouseDown(1) Then Frame1() If ImagesCollide(maus, MouseX(), MouseY(), 0, ende, 180, 135, 0) If MouseDown(1) Then End Flip Until KeyHit(1) End krieg ich noch nicht mal mehr eine Fehlermeldung mein Computer kriegt fast nen freeze muss den Taskmanger starten um das zu beheben wenn ich das Global wieder wegnehme kommt wieder "Illegal memory Address" also alles bei "LoadAnimImage" natuerlich! |
||
- Zuletzt bearbeitet von Snade am So, Jan 04, 2009 11:01, insgesamt einmal bearbeitet
The_Nici |
So, Jan 04, 2009 10:59 Antworten mit Zitat |
|
---|---|---|
Nein, er meint mit Global das Trooper Bild globalisieren, so dass es in der Function verwendet werden kann.
MfG |
||
Snade |
So, Jan 04, 2009 11:07 Antworten mit Zitat |
|
---|---|---|
ja stuertz aber trozdem ab! | ||
XeresModerator |
So, Jan 04, 2009 11:17 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] Function Frame1()
Streich das Repeat und Until Keyhit() da raus, das hat da nichts zu suchen. Genauso wie die Zählschleife sinnlos ist, da du nie bis zum Flip kommst, um überhaupt die ganzen Frames an zu zeigen.
Repeat For I=0 To 11 DrawImage trooper, 200,100,I Next Until KeyHit(4) End Function Benutze eine Variable die steuert, ob der Frame für's Bild hochgezählt wird. |
||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Snade |
So, Jan 04, 2009 11:23 Antworten mit Zitat |
|
---|---|---|
Deinen letzten Satz verstehe ich nicht ganz mit der Zaehlerschleife wollte ich das ja machen koenntest du mir an einem Beispiel erlaeutern wie du das meinst? | ||
XeresModerator |
So, Jan 04, 2009 11:27 Antworten mit Zitat |
|
---|---|---|
Die Zählschleife zählt direkt die Frames hoch, was du brauchst, ist eine Steuerungsvariable, die bestimmt, ob in diesem Durchlauf der Hauptschleife etwas zur passenden Variable dazugezählt werden darf. | ||
Win10 Prof.(x64)/Ubuntu 16.04|CPU 4x3Ghz (Intel i5-4590S)|RAM 8 GB|GeForce GTX 960
Wie man Fragen richtig stellt || "Es geht nicht" || Video-Tutorial: Sinus & Cosinus THERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld) |
Snade |
So, Jan 04, 2009 12:38 Antworten mit Zitat |
|
---|---|---|
kannst du mir bitte ein beispiel code posten ich versteh nicht so ganz was mit steuerungsvariable gemeint ist sry aber ich bin eben ein noob | ||
Goodjee |
So, Jan 04, 2009 13:00 Antworten mit Zitat |
|
---|---|---|
wie wärs mit so: frame speichert den momentanen frame
Code: [AUSKLAPPEN] Graphics 640,480,32,1
SetBuffer BackBuffer() start = LoadImage("gfx\start.png") maus = LoadImage("gfx\maus.png") ende = LoadImage("gfx\Ende.png") head = LoadImage("gfx\head.png") Global trooper = LoadAnimImage("gfx\trooper.png",48,52,0,12) Global Frame ; Transparente Farbe festlegen (blau). MaskImage start, 255, 255, 255 MaskImage maus, 255, 255, 255 MaskImage ende, 255, 255, 255 MaskImage head, 255, 255, 255 MaskImage trooper, 255, 255, 255 Color 0,255,0 Repeat Cls DrawImage start, 180,50 DrawImage ende, 180,135 DrawImage maus, MouseX(),MouseY() If ImagesCollide(maus, MouseX(), MouseY(), 0, start, 180, 50, 0) If MouseDown(1) Then Frame1() If ImagesCollide(maus, MouseX(), MouseY(), 0, ende, 180, 135, 0) If MouseDown(1) Then End Flip Until KeyHit(1) End Function Frame1() frame=frame+1 If(frame>11) frame=0 DrawImage trooper, 200,100,frame End Function |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Snade |
So, Jan 04, 2009 13:29 Antworten mit Zitat |
|
---|---|---|
Hat leider nich geklappt hmm das kann doch nicht so schwer sein tausende haben das doch schon hinbekommen | ||
Goodjee |
So, Jan 04, 2009 13:40 Antworten mit Zitat |
|
---|---|---|
vllt solltest du erstmal verständlcih machen was du genau willst...
vllt liegt es an imagescollide, das löst manchmal fehler aus |
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
Snade |
So, Jan 04, 2009 14:21 Antworten mit Zitat |
|
---|---|---|
Edit1: habs jetz hinbekommen aber der soldat bewegt sich ungefaehr 3mal zu schnell wo muss ich da ein delay einbauen in der Function oder wo anders?
Hatte nur vergessen Global Frame hinzuschreiben Edit2: hab das mit dem delay auch hinbekommen danke an alle! |
||
Goodjee |
So, Jan 04, 2009 14:28 Antworten mit Zitat |
|
---|---|---|
delay ist natürlich unschön, da es das ganze programm aufhängt und du während dessen keine anderen sachen machen kannst.
Besser ist zum beispiel das: lass die variable frame auf das zehnfache der eigentlichen framezahl laufen und zeichne den player wie folgt Code: [AUSKLAPPEN] DrawImage trooper, 200,100,frame/10
|
||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
FWeinbehemals "ich" |
So, Jan 04, 2009 15:29 Antworten mit Zitat |
|
---|---|---|
Das währe auch unschön da dann die Animation auf einem Schnellen PC schneller laufen würde.
Ich würde das ganze mit MilliSecs machen. mfg ichbin007 |
||
"Wenn die Menschen nur über das sprächen, was sie begreifen, dann würde es sehr still auf der Welt sein." Albert Einstein (1879-1955)
"If you live each day as if it was your last, someday you'll most certainly be right." Steve Jobs |
ozzi789 |
So, Jan 04, 2009 15:40 Antworten mit Zitat |
|
---|---|---|
Code: [AUSKLAPPEN] Graphics 640, 480, 32,2
SetBuffer BackBuffer() While Not KeyHit(1) Cls If MilliSecs() > zeit + 1000 Then ;Wenn die akktuelle Zeit grösser ist als die anfangszeit + 1 sekunde zeit = MilliSecs() ;die anfangszeit der akktuellen gleichsetzen frame=frame+1 ;frame raufzählen End If If frame>6 Then frame=1 ;wenn frame grösser als 6, dann frame = 1 Text 0,0,"Frame Nummer:"+frame Flip Wend Um einiges effektiver als Delay Und mein Tipp, fang bei nem Game nicht am Menü an.. mfg ozzi |
||
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5 |
Eingeproggt |
So, Jan 04, 2009 15:49 Antworten mit Zitat |
|
---|---|---|
*seufz*
Mit Flip hat man sowieso eine Frame-begrenzung, die allerdings 100% CPU berbraucht, daher wird zu Flip 0 in Verbindung mit Waittimer geraten... Wie oft muss mans noch sagen? Wer allerdings seine Image-Frames nicht mit jedem Spiel-Frame verändern will, der sollte wirklich zu Millisecs greifen wie es ozzi beschrieben hat. Schönes Rest-Wochenende. |
||
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9 |
Gehe zu Seite 1, 2, 3, 4 Weiter
Übersicht BlitzBasic Beginners-Corner
Powered by phpBB © 2001 - 2006, phpBB Group