Type global initializers must be constant [erledigt]

Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Neue Antwort erstellen

Justus

Betreff: Type global initializers must be constant [erledigt]

BeitragSo, Nov 06, 2005 13:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich habe mir Klips Thread mal angeschaut und möchte gerne für die Ballons in JumpingClown auch so etwas ausgefeiltes haben. Doch ich finde den Fehler nicht:

Immer bekomme ich einen Compile Error mit der Nachricht "Type global initializers must be constant".

Bestimmt total banal, aber irgendwie sehe ich den Quell des Übels nicht.

Hier die Klasse (ich hoffe so nennt man dieses Gebilde):

BlitzMax: [AUSKLAPPEN]
Type ballons

Global b:ballons
Global BallonList:TList = CreateList()

'Felder
Field x:Float
Field y:Float
Field xspeed:Float
Field yspeed:Float
Field art:Int
Field rot:Int
Field gruen:Int
Field blau:Int

Field ani:Int
Field startwait:Int

Field link:TLink

'Erstellt einen neuen Ballon
Function Create_Ballon(x#,y#,xspeed#,yspeed#,art,r,g,b)
b:ballons = New ballon
b.x = x#
b.y = y#
b.xspeed = xspeed#
b.yspeed = yspeed#
b.art = art
b.rot = r
b.gruen = g
b.blau = b

b.ani = 0
b.startwait = MilliSecs()

b.link = ListAddLast(BallonList,b:ballons)
EndFunction


Method Update_Ballon()
x = x + xspeed
y = y + yspeed

If startwait + 50 < MilliSecs() Then
ani = ani + 1
startwait = MilliSecs()
If ani > 0 Then ani = 0
EndIf
EndMethod


Method Draw_Ballon()
Select art
Case 1 SetScale 0.5,0.5
Case 2 SetScale 1,1
EndSelect
SetColor rot,gruen,blau
Draw_ShadowImage(img_ballon,x,y,ani)
EndMethod

EndType
  • Zuletzt bearbeitet von Justus am So, Nov 06, 2005 14:13, insgesamt einmal bearbeitet

TheShadow

Moderator

BeitragSo, Nov 06, 2005 13:38
Antworten mit Zitat
Benutzer-Profile anzeigen
vermutlich

Global BallonList:TList = CreateList()

mach doch:

Method new()
If BallonList=null then BallonList = CreateList()
EndMethod
AMD64 3500+ | GeForce6600GT 128MB | 1GB DDR | WinXPsp2

Justus

BeitragSo, Nov 06, 2005 13:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Nein, das hat leider keinen Effekt.

Er zeigt bei der Fehlermeldung auf die Methode Draw_Ballon().

Doch wenn ich die auskommentiere, zeigt er mit derselben Fehlermeldung auf die darüber...

Kommentiere ich sowohl die Methoden als auch die Funktion aus, zeigt er auf die erste Zeile Confused
 

Dreamora

BeitragSo, Nov 06, 2005 13:48
Antworten mit Zitat
Benutzer-Profile anzeigen
Aktuell kann man keine global initializer benutzen.
Wenn du CreateList anwenden oder überhaupt irgendwas zuweisen willst, musst du das aktuell im der New Method machen.

Es soll jedoch mit der neuen Version die bald kommt möglich sein, wie Mark mal geschrieben hat.

Und bitte bemühe künftig erst die Suchen Funktion. Das Problem wurde bereits vor einigen Wochen einmal ausführlich geklärt.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Justus

BeitragSo, Nov 06, 2005 14:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ihr überschätzt mich; ich weiß überhaupt nicht, was mit global initializer gemeint ist Surprised

Sagt doch einfach, dass ich es hätte außerhalb des Types schreiben sollen ^^

Hier meine Lösung:

BlitzMax: [AUSKLAPPEN]
Global b:ballons
Global BallonList:TList = CreateList()

Type ballons

'Felder
Field x:Float
Field y:Float
Field xspeed:Float
Field yspeed:Float
Field art:Int
Field rot:Int
Field gruen:Int
Field blau:Int

Field ani:Int
Field startwait:Int

Field link:TLink

'Erstellt einen neuen Ballon
Method Create_Ballon(x#,y#,xspeed#,yspeed#,art,rot,gruen,blau)
b:ballons = New ballons
b.x = x#
b.y = y#
b.xspeed = xspeed#
b.yspeed = yspeed#
b.art = art
b.rot = rot
b.gruen = gruen
b.blau = blau

b.ani = 0
b.startwait = MilliSecs()

b.link = ListAddLast(BallonList,b:ballons)
EndMethod


Method Update_Ballon()
x = x + xspeed
y = y + yspeed

If startwait + 50 < MilliSecs() Then
ani = ani + 1
startwait = MilliSecs()
If ani > 0 Then ani = 0
EndIf
EndMethod


Method Draw_Ballon()
Select art
Case 1 SetScale 0.5,0.5
Case 2 SetScale 1,1
EndSelect
SetColor rot,gruen,blau
Draw_ShadowImage(img_ballon,x,y,ani)
EndMethod

EndType
 

Dreamora

BeitragSo, Nov 06, 2005 14:25
Antworten mit Zitat
Benutzer-Profile anzeigen
Es muss nicht aus dem Type raus.
Aber du darfst bei der Deklaration von Global und Field keine Initialisierung (Befüllung mit Werten) vornehmen, sondern nur deren Deklaration halt.

Hier ist die korrekte Variante:
Zitat:

Type ballons

Global b:ballons
Global BallonList:TList

'Felder
Field x:float
Field y:float
Field xspeed:float
Field yspeed:float
Field art:Int
Field rot:Int
Field gruen:Int
Field blau:Int

Field ani:Int
Field startwait:Int

Field link:TLink
'Standard erzeugungsmethode die jedes Objekt besitzt
Method New()
if BallonList = Null then BallonList = CreateList()
self.Link = BallonList.addlast (self)
End Method

'Erstellt einen neuen Ballon
Function Create_Ballon(x#,y#,xspeed#,yspeed#,art,r,g,b)
b:ballons = New ballon
b.x = x#
b.y = y#
b.xspeed = xspeed#
b.yspeed = yspeed#
b.art = art
b.rot = r
b.gruen = g
b.blau = b

b.ani = 0
b.startwait = MilliSecs()

EndFunction


Method Update_Ballon()
x = x + xspeed
y = y + yspeed

If startwait + 50 < MilliSecs() Then
ani = ani + 1
startwait = MilliSecs()
If ani > 0 Then ani = 0
Endif
EndMethod


Method Draw_Ballon()
Select art
case 1 SetScale 0.5,0.5
case 2 SetScale 1,1
EndSelect
SetColor rot,gruen,blau
Draw_ShadowImage(img_ballon,x,y,ani)
EndMethod

EndType
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Justus

BeitragSo, Nov 06, 2005 14:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Initialisierung (Befüllung mit Werten)


Danke, ich glaube, das wird mir noch sehr helfen.
 

Dreamora

BeitragSo, Nov 06, 2005 16:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Mit der nächsten Version sollte das ohnehin kein Problem mehr sein, da es dort möglich sein wird, global und field von Types direkt bei ihrer Deklaration zu initialisieren.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Neue Antwort erstellen


Übersicht BlitzMax, BlitzMax NG Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group