Spiele-Idee

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2, 3, 4  Weiter

Neue Antwort erstellen

Snade

Betreff: Spiele-Idee

BeitragSa, Jan 03, 2009 20:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 03, 2009 20:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Steht das eigentlich schon in den FAQ? Den Fehler den du gemacht hast macht jeder irgendwann mal Wink
Global ist die Lösung.

mfG, Christoph.
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

Snade

BeitragSa, Jan 03, 2009 23:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSa, Jan 03, 2009 23:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielleicht existiert die Bilddatei nicht?

Eingeproggt

BeitragSa, Jan 03, 2009 23:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jan 04, 2009 10:53
Antworten mit Zitat
Benutzer-Profile anzeigen
achso dachte du meinst mit Global die Function Very Happy
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

BeitragSo, Jan 04, 2009 10:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, er meint mit Global das Trooper Bild globalisieren, so dass es in der Function verwendet werden kann.

MfG

Snade

BeitragSo, Jan 04, 2009 11:07
Antworten mit Zitat
Benutzer-Profile anzeigen
ja stuertz aber trozdem ab!

Xeres

Moderator

BeitragSo, Jan 04, 2009 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]
Function Frame1()
Repeat
For I=0 To 11
DrawImage trooper, 200,100,I
Next
Until KeyHit(4)
End Function
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.
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Snade

BeitragSo, Jan 04, 2009 11:23
Antworten mit Zitat
Benutzer-Profile anzeigen
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?

Xeres

Moderator

BeitragSo, Jan 04, 2009 11:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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
T
HERE IS NO FAIR. THERE IS NO JUSTICE. THERE IS JUST ME. (Death, Discworld)

Snade

BeitragSo, Jan 04, 2009 12:38
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Smile

Goodjee

BeitragSo, Jan 04, 2009 13:00
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jan 04, 2009 13:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Hat leider nich geklappt hmm das kann doch nicht so schwer sein tausende haben das doch schon hinbekommen Sad

Goodjee

BeitragSo, Jan 04, 2009 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jan 04, 2009 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Embarassed

Edit2: hab das mit dem delay auch hinbekommen danke an alle!

Goodjee

BeitragSo, Jan 04, 2009 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
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/
 

FWeinb

ehemals "ich"

BeitragSo, Jan 04, 2009 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Jan 04, 2009 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Wink
Und mein Tipp, fang bei nem Game nicht am Menü an..

mfg ozzi
0x2B || ! 0x2B
C# | C++13 | Java 7 | PHP 5

Eingeproggt

BeitragSo, Jan 04, 2009 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
*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? Rolling Eyes

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

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group