Object does not exist... [Gelöst]

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Breezer

Betreff: Object does not exist... [Gelöst]

BeitragDo, März 01, 2012 19:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe blitz 3D vor 3 Tagen entdeckt und mir gleich die Demo runtergeladen. Heute hatte ich mein erstes
"Spiel" fertig (So ein Space-Shooter, bei dem man ein Raumschiff hin und her bewegt um aliens abzuschiessen).
Ich habe wirklich überhaupt keine vorkentnisse und mir das meiste aus tutorials abgeschaut. Es hat auch alles wunderbar geklappt, und ich hab meines Wissens auch nichts verändert, aber als ich das Programm vor 20 minuten starten wollte, ist es 5 Sekunden angelaufen und dann kam die Fehlermeldung "Object does not exist". Dabei wird eine Zeile angezeigt, die den Startpunkt der Bombe( die die aliens abschiessen) im Verhältnis zur aktuellen Position des Aliens beschreibt.

BlitzBasic: [AUSKLAPPEN]
Graphics 1024, 768, 16, 2

timer = CreateTimer(30)

AutoMidHandle True
img_ship = LoadImage("ship.png")
img_bullet = LoadImage("bullet.png")
img_alien = LoadImage("alien.png")
img_bomb = LoadImage("bomb.png")
MaskImage img_alien, 255,255,255

;bullet type
Type bullet
Field x
Field y
End Type

;bomb type
Type bomb
Field x
Field y
End Type


;alien type
Type alien
Field x
Field y
End Type

;set starting coords for player
x = 512
y = 700

;set alien speed
amx = 1

level = 1
lives = 3
score = 0
lines = 2

SetBuffer BackBuffer()

;generate alien
For z = 1 To 7
For w = 1 To lines
a.alien = New alien
a\x = 120 + 100*z
a\y = 150 + 50*w
Next
Next

;start main loop----------------------------------------------------------------------------
While Not KeyDown(1)


Cls
DrawImage img_ship, x, y

;update player position
If KeyDown(203) Then x = x - 5
If KeyDown(205) Then x = x + 5



;firing bullets
If KeyHit(57) Then
b.bullet = New bullet
b\x = x
b\y = y - 50
EndIf

;update and draw bullets
For b.bullet = Each bullet
b\y = b\y - 8
DrawImage img_bullet, b\x, b\y
If b\y < 0 Then Delete b
Next

;update and draw aliens
For a.alien = Each alien

a\x = a\x + amx
If a\x > 996 Then amx = - amx
If a\x < 30 Then amx = - amx

DrawImage img_alien, a\x, a\y
For b.bullet = Each bullet
If ImagesCollide(img_bullet, b\x, b\y, 0, img_alien, a\x, a\y,0) Then
Delete b
Delete a
score = score + 10
Exit
EndIf
Next
Next

;generating bombs
If Rand(200) = 25 Then
bombs.bomb = New bomb
bombs\x = a\x
bombs\y = a\y + 20
EndIf

;update an draw bombs
For bombs.bomb = Each bomb
bombs\y = bombs\y + 6
DrawImage img_bomb, bombs\x, bombs\y

If ImagesCollide(img_bomb, bombs\x, bombs\y, 0, img_ship, x, y, 0) Then
Delete bombs
lives = lives - 1
ElseIf bombs\y > 1040 Then
Delete bombs
EndIf

Next

;endgame screen
If lives = 0 Then
Text 512, 384, "GAME OVER!" , 1, 1
Flip
Delay 3000
End
EndIf


;life counter
Text 50, 720, "LIVES " + lives

;score counter
Text 925, 720,"SCORE " + score



WaitTimer(timer)


Flip

;end main loop---------------------------------------------------------------------------------
Wend

End


Gemeint ist die Zeile "bombs\x = a\x" im Bereich ";generating bombs"
Frage: was bedeutet diese Fehlermeldung und wie kann ich das Problem lösen? Ich komm echt nicht drauf...
Wie klingt der Zug? n00b n00b n00b...
  • Zuletzt bearbeitet von Breezer am Di, März 06, 2012 21:31, insgesamt einmal bearbeitet

ZEVS

BeitragDo, März 01, 2012 19:40
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Gratulation. Ohne Vorkenntnisse in drei Tagen... Respekt!
Zum Thema: Das Objekt a (alien) existiert nur in der For-Each-Schleife. Danach ist es Null und der Aufruf schlägt fehl.
Lösung: Schiebe den generating bombs-Block in die Alien-Schleife:
BlitzBasic: [AUSKLAPPEN]

;update and draw aliens
For a.alien = Each alien

a\x = a\x + amx
If a\x > 996 Then amx = - amx
If a\x < 30 Then amx = - amx

DrawImage img_alien, a\x, a\y
For b.bullet = Each bullet
If ImagesCollide(img_bullet, b\x, b\y, 0, img_alien, a\x, a\y,0) Then
Delete b
Delete a
score = score + 10
Exit
EndIf
Next
;generating bombs
If Rand(200) = 25 Then
bombs.bomb = New bomb
bombs\x = a\x
bombs\y = a\y + 20
EndIf
Next
 

Breezer

BeitragDo, März 01, 2012 20:05
Antworten mit Zitat
Benutzer-Profile anzeigen
1. Naja, ein grosser Teil ist halt praktisch abgeschrieben, aber trotzdem danke Wink
2. Vielen Dank für deine Hilfe, hat sofort funktioniert !!!Mr. Green
3.Gibts hier sowas wie eine thread-closen-Funktion?
Wie klingt der Zug? n00b n00b n00b...
  • Zuletzt bearbeitet von Breezer am Di, März 06, 2012 21:31, insgesamt einmal bearbeitet

BladeRunner

Moderator

BeitragDo, März 01, 2012 20:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Du kannst den Titel editieren: ein [Gelöst] vor den Titel und alle wissen hier wurde geholfen.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

Xeres

Moderator

BeitragDo, März 01, 2012 20:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Willkommen!
Wenn du magst, kannst du deinen Startpost editieren und "[Gelöst]" hinter den Titel schreiben.

Ich würde dir noch empfehlen, Höhe und Breite in Variablen oder Konstanten zu packen und "gfx_w*0.97" statt "996" zu schreiben. Einzelne Zahlen im ganzen Programm zu korrigieren, ist nicht besonders lustig.
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)

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group