Prob mit Global

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

Michi

Betreff: Prob mit Global

BeitragSa, Feb 12, 2005 20:59
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich bastle gerade an einem Partikel-system mit types und habe folgendes Problem:
wenn man auf Enter drückt, sollen 5184 neue Partikel erstellt werden, die dann in alle Richtungen von einem Punkt aus wegfliegen. Eine explosion von bunten kreisen sozusagen. dafür habe ich eine Function geschriben, die die Dinger in zwei verschachtelten For...Next Schleifen erstellt.
da das aber eine Function ist, sind die Partikel logischerweise Local. In der hauptschleife sollen sie dann bewgt werden. Da sie aber Local sind, kommt natürlich eine Illegal memory adress Confused
Ich kann sie im Unterprogramm aber nicht Global erstellen.
Wie kann ich das lösen?
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968
Code: [AUSKLAPPEN]

   __
<_/__\_> <--- die Wayne-Zeichnung

simi

BeitragSa, Feb 12, 2005 21:02
Antworten mit Zitat
Benutzer-Profile anzeigen
wo speichesrt denn du die Handels??? Dims sind eigentlich gloabl, Types glaube ich auich Confused

General Alex

BeitragSa, Feb 12, 2005 21:05
Antworten mit Zitat
Benutzer-Profile anzeigen
simi hat Folgendes geschrieben:
wo speichesrt denn du die Handels??? Dims sind eigentlich gloabl, Types glaube ich auich Confused

Dims kann man aber nur im Hauptprogramm definieren. Confused
 

Michi

BeitragSa, Feb 12, 2005 21:16
Antworten mit Zitat
Benutzer-Profile anzeigen
Code: [AUSKLAPPEN]

Type sowieso
 field X
 field Y
 field Z
End Type

irgandwas.sowieso=New sowieso

sowieso ist global,
irgendwas nicht
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968
Code: [AUSKLAPPEN]

   __
<_/__\_> <--- die Wayne-Zeichnung

Maniac

BeitragSa, Feb 12, 2005 22:24
Antworten mit Zitat
Benutzer-Profile anzeigen
Klick misch
User posted image
^^
 

Michi

BeitragSa, Feb 12, 2005 22:28
Antworten mit Zitat
Benutzer-Profile anzeigen
da stehts nicht drin.
es geht ja eigentlich nicht um die types, sondern um "erstellen von sachen in Functions und benutzen in der Hauptschleife"
Ich könnte auch Bilder laden oder meshes
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968
Code: [AUSKLAPPEN]

   __
<_/__\_> <--- die Wayne-Zeichnung

Rob_

BeitragSa, Feb 12, 2005 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Zeig doch mal uns deinen bisherigen code.
AMD Athlon 64 3500+ | Infineon 1 GB DDR RAM | nVidia Geforce 7800 GTX
 

Michi

BeitragSa, Feb 12, 2005 23:07
Antworten mit Zitat
Benutzer-Profile anzeigen
also ich habs jetzt erst mal mit goto gelöst (Das das böse ist weis ich):



Code: [AUSKLAPPEN]
Graphics3D 800, 600, 16, 1

SeedRnd MilliSecs()

Type Partikel
   Field objekt
   Field X#
   Field Y#
   Field Z#
   Field rot
   Field gruen
   Field blau
   Field X_Ver#
   Field Y_Ver#
   Field Z_Ver#
   Field LD
End Type

Type Partikelemitter
   Field X#
   Field Y#
   Field Z#
   Field Menge
End Type

Global PE.Partikelemitter=New Partikelemitter

c=CreateCamera()
l=CreateLight(1)

bild=CreateImage(32, 32)
SetBuffer ImageBuffer(bild)
Color 255, 255, 255
Oval 0, 0, 32, 32, 1

SetBuffer BackBuffer()
SaveImage(bild, "C:/NeuBitmap.bmp" )

o=LoadSprite( "C:/NeuBitmap.bmp" )
ScaleSprite o, 0.1, 0.1
HideEntity o
PositionEntity c, 0, 0, -5

Global Nummer=-1

P.Partikel=New Partikel
P\objekt=CopyEntity(o)
EntityAlpha P\objekt, 0

Repeat

If KeyHit(28) Then Goto explo
.zurueck

For P=Each Partikel

P\X#=P\X#+P\X_Ver#
P\Y#=P\Y#+P\Y_Ver#
P\Z#=P\Z#+P\Z_Ver#
PositionEntity P\objekt, P\X#, P\Y#, P\Z#

P\LD=P\LD-1
If P\LD<1 Then
   FreeEntity P\objekt
   Delete P
EndIf
Next

If KeyDown(200) Then TurnEntity c, 1, 0, 0
If KeyDown(208) Then TurnEntity c, -1, 0, 0
If KeyDown(203) Then TurnEntity c, 0, 1, 0
If KeyDown(205) Then TurnEntity c, 0, -1, 0
If KeyDown(30) Then MoveEntity c, 0, 0, 0.1
If KeyDown(44) Then MoveEntity c, 0, 0, -0.1

PE=First Partikelemitter

For i=0 To Nummer
PE=After PE
Next

If KeyDown(75) Then PE\X#=PE\X#-0.1
If KeyDown(77) Then PE\X#=PE\X#+0.1
If KeyDown(72) Then PE\Y#=PE\Y#+0.1
If KeyDown(80) Then PE\Y#=PE\Y#-0.1
If KeyDown(71) Then PE\Z#=PE\Z#-0.1
If KeyDown(73) Then PE\Z#=PE\Z#+0.1

If KeyHit(74) Then Nummer=Nummer+1
If KeyHit(78) Then Nummer=Nummer-1

RenderWorld
UpdateWorld

Text 10, 10, Nummer

Flip
Until KeyHit(1)
End

.explo

For PE=Each Partikelemitter

For i=0 To 36
For j=0 To 36

ueber=Rnd(0, 2)
If ueber>0 Then j=j+1

P.Partikel=New Partikel
P\objekt=CopyEntity(o)
P\X#=PE\X#
P\Y#=PE\Y#
P\Z#=PE\Z#
P\rot=Rnd(0, 255)
P\gruen=Rnd(0, P\rot/2)
P\blau=Rnd(0, 32)
EntityColor P\objekt, P\rot, P\gruen, P\blau
a1=i*10
a2=j*10

P\Y_Ver#=Sin(a1)*1
XZ_Ver#=Cos(a1)*1
P\Z_Ver#=Cos(a2)*XZ_Ver#
P\X_Ver#=Sin(a2)*XZ_Ver#

Geschw=Rnd(1, 10)

P\X_Ver#=P\X_Ver#*0.0025*Geschw
P\Y_Ver#=P\Y_Ver#*0.0025*Geschw
P\Z_Ver#=P\Z_Ver#*0.0025*Geschw
P\LD=Rnd(100, 250)

Next
Next

Next

Goto zurueck


habs für euch abgeändert, dass es so funktioniert, erstellt aber das Bild "C:/NeuBitmap.bmp"

enter drücken nicht vergessen!

[Edit] einige Sachen werden (noch) nicht genutzt, sind augendblicklich überflüssig [/Edit]
Aber..Wozu soll er gut sein???
IBM-Ingeneur über die Idee des Mikroprozessors, 1968
Code: [AUSKLAPPEN]

   __
<_/__\_> <--- die Wayne-Zeichnung

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group