Space Shooter Type

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

joshmami

Betreff: Space Shooter Type

BeitragDi, März 01, 2011 19:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo Community!
Ich lese gerade dieses Tutorial http://de.wikibooks.org/wiki/B...ceShooter)
Und mache mich gerade daran den Spaceshooter zu programmieren.
Inzwischen habe ich begriffen dass ich die Schüsse mit TYPE's realisieren muss.Aber wie sorge ich dafür dass sich der Name jedes Schusses ändert?
Wenn ich habe(in meiner Hauptschleife)
BlitzBasic: [AUSKLAPPEN]

If KeyDown(57) Then
Schuss.Shot = New Shot ;Shot heist mein Type
Schuss.Shot\XPosition = XPositionRaumschiff
Schuss.Shot\YPosition = YPositionRaumschiff - 100
EndIf
DrawImage SchussBild,Schuss\XPosition,Schuss\YPosition
Schuss\YPosition = Schuss\YPosition - 10

Dann wird der Schuss ja bei jedem Druck der Taste wieder zurückgeholt!
Mfg Joshmami
  • Zuletzt bearbeitet von joshmami am Di, März 01, 2011 20:12, insgesamt einmal bearbeitet

mpmxyz

BeitragDi, März 01, 2011 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
So wie es aussieht, nutzt du hier nur einen der Type-Einträge, indem du ihn in einer Variable festhältst.
BlitzBasic erstellt automatisch eine Liste von allen erstellten Type-Einträgen.
Wenn du nun alle nutzt, wirst du auch mehr Schüsse sehen und nicht nur den letzten erstelllten:
BlitzBasic: [AUSKLAPPEN]
If KeyDown(57) Then
Schuss.Shot = New Shot ;Shot heist mein Type
Schuss.Shot\XPosition = XPositionRaumschiff
Schuss.Shot\YPosition = YPositionRaumschiff - 100
EndIf

For Schuss.Shot=Each Shot 'gehe jeden Schuss durch und mache mit ihm etwas
DrawImage SchussBild,Schuss\XPosition,Schuss\YPosition
Schuss\YPosition = Schuss\YPosition - 10
Next

mfG
mpmxyz
Moin Moin!
Projekte: DBPC CodeCruncher Mandelbrot-Renderer

joshmami

BeitragDi, März 01, 2011 19:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt wird garnichts angezeigt... Confused
Es kommt aber auch keine Fehlermeldung Very Happy
Mfg Joshmami

Holzchopf

Meisterpacker

BeitragDi, März 01, 2011 20:17
Antworten mit Zitat
Benutzer-Profile anzeigen
Aus dem kaputten Thread entnommen:

Midimaster hat Folgendes geschrieben:
Bei NEW erzeugst Du jedesmal eine neue Variable vom Typ Schuss.

Um die alle einzeln anzusprechen kommt du nicht ohne FOR/EACHIN/NEXT aus.

BlitzBasic: [AUSKLAPPEN]
For locSchuss.SchussTyp= Each SchussTyp
DrawImage SchussBild, locSchuss\XPosition,locSchuss\YPosition
locSchuss\YPosition = locSchuss.YPosition - 4
Next


Benenne um Himmels willen den TYPE, die Variable und die Bilder je mit einem unterschiedlichen Namen:

z.b

SchussTyp
locSchuss
neuSchuss
SchussBild
Erledige alles Schritt um Schritt - erledige alles. - Holzchopf
CC BYBinaryBorn - Yogurt ♫ (31.10.2018)
Im Kopf da knackt's und knistert's sturm - 's ist kein Gedanke, nur ein Wurm

Xeres

Moderator

BeitragDi, März 01, 2011 20:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Jetzt wäre der ganze aktuelle Code hilfreich.
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)

joshmami

BeitragDi, März 01, 2011 20:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Aktueller Code:
BlitzBasic: [AUSKLAPPEN]

For Schuss.TypeShot = Each TypeShot
DrawImage ShotBild,Schuss\XPosition,Schuss\YPosition
Schuss\YPosition = Schuss\YPosition - 10
Next
If KeyDown(57)
Schuss.TypeShot = New TypeShot
Schuss.TypeShot\XPosition = XPositionFalke
Schuss.TypeShot\YPosition = YPositionFalke - 100
EndIf
Mfg Joshmami

Xeres

Moderator

BeitragDi, März 01, 2011 20:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Eigentlich meinte ich den ganzen Code, also Hauptschleife + Funktionen. Denn so sollte es funktionieren - der Fehler wird wo anders liegen.
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)

joshmami

BeitragMi, März 02, 2011 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh,sorry,ganzer Code:

BlitzBasic: [AUSKLAPPEN]

Xmax% = 1024
Ymax% = 768
Graphics Xmax,Ymax,16,2
SetBuffer BackBuffer()
SeedRnd MilliSecs()
Global Frametimer = CreateTimer(60)
Falke = LoadImage("Falke.bmp")
ShotBild = LoadImage("Shot.bmp")
MidHandle Falke
Global XPositionFalke
XPositionFalke = Xmax/2
Global Zahl%
Dim XStern(1000)
Dim YStern(1000)
For Zahl = 0 To 1000
XStern( Zahl ) = Rand(1,1024)
YStern( Zahl ) = Rand(1,768)
Next
Global Shots
Type TypeShot
Field XPosition
Field YPosition
Field Schaden
End Type
Global ShotDa
ShotDa = 0
Repeat
WaitTimer(Frametimer)
For Zahl = 0 To 1000
YStern( Zahl ) = YStern( Zahl ) + 1
If YStern( Zahl ) = 768 Then
YStern( Zahl ) = 1
XStern( Zahl ) = Rand(1 , 1024)
EndIf
Plot XStern( Zahl ),YStern( Zahl )
Next
DrawImage Falke, XPositionFalke,650
For Schuss.TypeShot = Each TypeShot
DrawImage ShotBild,Schuss\XPosition,Schuss\YPosition
Schuss\YPosition = Schuss\YPosition - 10
Next
If KeyDown(203) Then
XPositionFalke = XPositionFalke - 8
EndIf
If KeyDown(205) Then
XPositionFalke = XPositionFalke + 8
EndIf
If KeyDown(57)
Schuss.TypeShot = New TypeShot
Schuss.TypeShot\XPosition = XPositionFalke
Schuss.TypeShot\YPosition = YPositionFalke - 100
EndIf
If XPositionFalke < 52 Then
XPositionFalke = 52
EndIf
If XPositionFalke > 972 Then
XPositionFalke = 972
EndIf
Flip
Cls
Until KeyHit(1)
End

Wobei ich als Bild(Nur zum Spaß) den Millenium Falken aus Star wars genommen hab und ein bewegter Sternenhintergrund ist auch dabei!
Mfg Joshmami

Xeres

Moderator

BeitragMi, März 02, 2011 14:24
Antworten mit Zitat
Benutzer-Profile anzeigen
A) Du deklarierst keine Variable YPositionFalke:
Code: [AUSKLAPPEN]
DrawImage Falke, XPositionFalke,650

was bedeutet, bei der 1. Benutztung ist sie null und die Geschosse...
Code: [AUSKLAPPEN]
Schuss.TypeShot\YPosition = 0 - 100

entstehen 100px über dem Sichtbaren bereich...

Ich empfehle, die IDEal IDE zu benutzen und alle Variablen zu deklarieren - dann sieht man anhand der Farbe, ob die Variablen richtig geschrieben wurden usw.
Ansonsten hilft dir bei sowas Debuglog um den Fehlerhaften Punkt zu finden.
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)

Midimaster

BeitragMi, März 02, 2011 14:35
Antworten mit Zitat
Benutzer-Profile anzeigen
Das wichtigste beim Programmieren ist eine Methode zu entwickeln, mit der man die Fehler findet.

Ich habe z.B. gerade bei Deinem Code einfach folgende Ergänzungen eingefügt:

BlitzBasic: [AUSKLAPPEN]
	If KeyHit(57)
Text 100,120, "feuer"
Schuss.TypeShot = New TypeShot
Schuss.TypeShot\XPosition = XPositionFalke
Schuss.TypeShot\YPosition = YPositionFalke - 100
EndIf

...um herauszufinden, ob der Schuss überhaupt losgeht.


BlitzBasic: [AUSKLAPPEN]
	DrawImage Falke, XPositionFalke,650
DrawImage ShotBild,30,650 ;<-----------------
I=0
For Schuss.TypeShot = Each TypeShot
I=i+1 ;<-----------------
DrawImage ShotBild,Schuss\XPosition,Schuss\YPosition
Schuss\YPosition = Schuss\YPosition - 10
Text 100,100,Schuss\YPosition ;<-----------------
Next
Text 100,140,i ;<-----------------

...um festzustellen wo er sich gerade befindet und wieviele Schüsse unterwegs sind. Und das zusätzliche DRAWIMAGE dient mir dazu, festzustellen, ob das SchussBild überhaupt sichtbar ist.
  • Zuletzt bearbeitet von Midimaster am Mi, März 02, 2011 15:33, insgesamt 2-mal bearbeitet

joshmami

BeitragMi, März 02, 2011 15:18
Antworten mit Zitat
Benutzer-Profile anzeigen
Ok,ich habe jetzt alles getan was du gesagt hast:
1.Beim Druck der Leertaste wird wie erwartet "feuer" ausgegeben
2.Nach dem ersten Druck steigt die Zahl wie zu erwarten rasend schnell, weil sie ja mit jedem Durchlauf der Hauptschleife erhöht wird
3.Es wird ohne Probleme der "Probeschuss" angezeigt

Edit: Jetz hab ich die Lösung! Ich habe ihn noch anzeigen lassen wo der Schuss aktuell ist, dort wurde aber von Anfang an eine Minus Ziffer angezeigt weil YPositionFalke gar kein Wert zugewiesen wurde und ich
beim Zeichnen des Falkens 650 als Wert verwendet hatte!
Vielen Dank für den Tipp, mir die Werte ausgeben zu lassen!
Mfg Joshmami

Midimaster

BeitragMi, März 02, 2011 15:33
Antworten mit Zitat
Benutzer-Profile anzeigen
Lass solche Entwicklerzeilen so lange wie möglich drin. du erfährst viel über das, was dein Programm eben nicht so tut, wie Du es erwartest.

Ich habe da mal ein Tutorial zum Fehlerfinden geschrieben. Vielleicht liest Du ja mal Kapitel IV durch....
https://www.blitzforum.de/foru...620#354620


Das größte Problem bei Anfänger ist, dass Sie solche Informationszeilen entweder gar nicht aufnehmen und wenn ja, dann gleich wieder entfernen, weil das ja den Spielscreen "verunreinigt". Dabei würden sie einem oft auch noch Stunden später bei einem weiteren Problem auf den richtigen Lösungsweg führen.

joshmami

BeitragMi, März 02, 2011 17:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja , Danke, werd ich machen.Und meine Infozeilen lass ich erst mal drin...
Mfg Joshmami

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group