NPC: Meteor per Function

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Darthshoot

Betreff: NPC: Meteor per Function

BeitragDo, Dez 28, 2006 20:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo!

Ich wollte im Mainprogramm einfach 2 externe Dateien laden. In der einen sind Daten vom Meteor drin:

Code: [AUSKLAPPEN]
; Meteor
Global MeteorImage = LoadImage("Meteor.bmp")
MaskImage MeteorImage, 255, 0, 255


Und in der anderen wird eine Art NPC erstellt:

Code: [AUSKLAPPEN]
; Meteor
Function NPC_Meteor(XMeteor, YMeteor, Flugbahn1, Flugbahn2)

; Berechne Flugbahn
If MeteorOn = 1 Then
XMeteor = XMeteor - Flugbahn1
YMeteor = YMeteor + Flugbahn2
If XMeteor < -50 Then
YMeteor = 700
MeteorOn = 0
Else

; Render Meteor...
DrawImage MeteorImage, XMeteor, YMeteor

EndIf
EndIf
End Function


Jetzt soll man in der Bufferschleife nur noch die Function aufrufen und schon wird ein Meteor gespawnt. Und zwar so:

Code: [AUSKLAPPEN]
NPC_Meteor(500, 300, 3, 0)


Wobei die ersten beiden die Startpunkte sind und der dritte der Grad ist, in dem er sich bewegt und der vierte in welche richtung (nach unten oder oben) weil das ganze game von der Seite betrachtet ist... ehm aber irgendwie wird der Meteor garnicht angezeigt Sad da scheint sich überhaupt nichts zu tun!! Woran liegts? Ich rufe die Function übrigens in der Bufferschleife auf und zum Testen auch mal außerhalb - trotzdem nichts.

Danke im Voraus.
MfG Darthshoot

EDIT: HALT! Ich hatte vergessen MeteorOn eine eins zu geben.. jetzt wird er zwar sichtbar, aber bewegen tut er sich trotzdem nicht - warum?

Code: [AUSKLAPPEN]
; Meteor
Function NPC_Meteor(XMeteor, YMeteor, Flugbahn1, Flugbahn2)

MeteorOn = 1

; Berechne Flugbahn
If MeteorOn = 1 Then
XMeteor = XMeteor - Flugbahn1
YMeteor = YMeteor + Flugbahn2
If XMeteor < -50 Then
YMeteor = 700
MeteorOn = 0
Else

; Render Meteor...
DrawImage MeteorImage, XMeteor, YMeteor

EndIf
EndIf
End Function
 

Dreamora

BeitragDo, Dez 28, 2006 20:54
Antworten mit Zitat
Benutzer-Profile anzeigen
weil du ihn 1x ansprichst und das war es. Du musst in der Mainloop auch eine aktualisierungsroutine haben die die Position auch effektiv aktualisiert. Von selbst wird das nicht geschehen, warum auch ...
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

Darthshoot

BeitragDo, Dez 28, 2006 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Also ich habe jetzt nur noch ein Problem! Mit einem Komet klappts bestens. Aber das Problem ist, dass ich immer globale Variablen aktualisieren muss und ab 2 Kometen, kann ich in Meteor.bb nicht mehr diese globalen Variablen direkt ansprechen. Jetzt muss ich mir die irgendwie zusammen bauen. Geht das überhaupt? Also:

Code: [AUSKLAPPEN]
; Meteore initialisieren
Global Meteor1 = 1
Global M1P1 = 500
Global M1P2 = 300

Global Meteor2 = 1
Global M2P1 = 200
Global M2P2 = 400

Global Meteor3 = 1
Global M3P1 = 300
Global M3P2 = 500


..

NPC_Meteor(M1P1, M1P2, 3, 0, Meteor1, IDName1$ = "1")
NPC_Meteor(M2P1, M2P2, 3, 0, Meteor2, IDName2$ = "2")
NPC_Meteor(M3P1, M3P2, 3, 0, Meteor3, IDName3$ = "3")


Meteor.bb:

Code: [AUSKLAPPEN]
; Meteor
Function NPC_Meteor(XMeteor, YMeteor, Flugbahn1, Flugbahn2, ID, IDName$)

; Berechne Flugbahn
If ID = 1 Then
"M" + IDName$ + "P1" = XMeteor - Flugbahn1
"M" + IDName$ + "P2" = YMeteor + Flugbahn2

; Render Meteor...
DrawImage MeteorImage, XMeteor, YMeteor

If XMeteor < -100 Then "Meteor" + IDName$ = 0
EndIf
End Function


Wenn ich mir also wie z.B. aus "Meteor" + IDName$ ein Meteor1 rauskommt oder eben die Nummer von der IDName, dann ist mein Problem gelößt, da er dann wieder die richtige globale Variable ansprechen würde.. aber irgendwie kommt bei meinem Script "expecting endif" und das liegt hundert Pro an diesen zusammengebatschten Variablen.
 

snörkl

BeitragDo, Dez 28, 2006 21:35
Antworten mit Zitat
Benutzer-Profile anzeigen
mach das am besten mit types oder das du einfach immer

global Komet=Kometenzähler
kometenzähler=kometenzähler+1


dann später einfach bei index=kometenzähler

oder so ähnlich
 

Darthshoot

BeitragDo, Dez 28, 2006 22:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Oman ich seh schon ich komm nicht um die Types herum... Also das Problem mit dem Zähler ist ja, dass er entweder 0 oder 1 ist und nicht 2 oder 3. Gibts denn garkeine Möglichkeit?
 

Darthshoot

BeitragFr, Dez 29, 2006 11:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe das Problem jetzt gelößt .. leider schlecht :/ aber gut.. aber trotzdem wird irgendwie nichts berechnet oder gerendert - woran liegts?


Hier ist einfach Meteor1 wenn 1 dann soll er gerendert werden und sowas.. Die P1, P2 sind X und Y Spawnpoints. ID wird für eine Case Anweisung benutzt.

Code: [AUSKLAPPEN]
; Meteore initialisieren
Global Meteor1 = 1
Global M1P1 = 500
Global M1P2 = 300

Global Meteor2 = 1
Global M2P1 = 200
Global M2P2 = 400

Global Meteor3 = 1
Global M3P1 = 300
Global M3P2 = 500

..

; Meteore werden gespawnt... P1: X, P2: Y, P3: Speed, P4: Flugwinkel, P5: ID vom Meteor...
NPC_Meteor(M1P1, M1P2, 3, 0, ID = 1)
NPC_Meteor(M2P1, M2P2, 3, 0, ID = 2)
NPC_Meteor(M3P1, M3P2, 3, 0, ID = 3)


Code: [AUSKLAPPEN]
; Meteor
Function NPC_Meteor(XMeteor, YMeteor, Flugbahn1, Flugbahn2, ID)

; Berechne Flugbahn
Select ID

Case 1
M1P1 = XMeteor - Flugbahn1
M1P2 = YMeteor + Flugbahn2

; Render Meteor...
DrawImage MeteorImage, XMeteor, YMeteor

If XMeteor < -100 Then Meteor1 = 0
EndIf

Case 2
If Meteor2 = 1 Then
M2P1 = XMeteor - Flugbahn1
M2P2 = YMeteor + Flugbahn2

; Render Meteor...
DrawImage MeteorImage, XMeteor, YMeteor

If XMeteor < -100 Then Meteor2 = 0
EndIf

Case 3
If Meteor3 = 1 Then
M3P1 = XMeteor - Flugbahn1
M3P2 = YMeteor + Flugbahn2

; Render Meteor...
DrawImage MeteorImage, XMeteor, YMeteor

If XMeteor < -100 Then Meteor3 = 0
EndIf

End Select

End Function


Was hab ich diesmal falsch gemacht?

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group