I'm having trouble with the TLink type.
BlitzMax Forums/BlitzMax Beginners Area/I'm having trouble with the TLink type.
| ||
I'm trying to get the first object from the list without using the for...eachin loop but I'm having trouble because it can't convert from object to type Image.Local current:TLink = ImageList.FirstLink() Local myImage:Image = Image(current._value) Image is an object so it should work.
Global ImageList:TList = New TList
Type Image
Global ImageListCount:Int =0
Field xpos,ypos:Int
Field _image:TImage
Field AlphaLevel:Float
Field Scale:Float
'instantiate and each object to List
Function Create:Image(strPath:String,startXpos:Int,startYpos:Int,imgAlpha:Float,imgScale:Float)
Local img:Image = New Image
img._image = LoadImage(strPath)
ImageListCount:+1
img.xpos = startXpos
img.ypos = startYpos
img.AlphaLevel = imgAlpha
img.Scale = imgScale
ListAddLast ImageList, img
End Function
Method Render()
Local current:TLink = ImageList.FirstLink()
Local myImage:Image = Image(current._value)
MidHandleImage myImage._image
SetScale Scale,Scale
SetAlpha AlphaLevel
DrawImage myImage._image, (myImage.xpos), myImage.ypos
Update(myImage)
End Method
End Type
|
| ||
Try:Local myImage:Image = Image(ImageList.First()) Can't imagine why your code wouldn't work in the first place though. |
| ||
| TLink is a [silly] name for it in teh first place. Should be node. Ahwell. Noel is correct. Tubad the docs only cover functions and not methods. |
| ||
Didn't work. I get an 'Illegal operation on empty list'.
Strict
Graphics 800,600,0,20
Global ImageList:TList = New TList
Local block:Image = New Image
'loading path to graphics
'and create objects
Function LoadPieces()
Local gh = GraphicsHeight() / 2
Local gw = GraphicsWidth() / 2
'string array
Local arrPath:String[]=["gfx/blue.bmp","gfx/green.bmp","gfx/yellow.bmp","gfx/red.bmp","gfx/orange.bmp","gfx/violet.bmp"]
For Local i:String = EachIn arrPath
Image.Create(i,gw,gh,1.0,1.0)
Next
End Function
Type Image
Global ImageListCount:Int =0
Field xpos,ypos:Int
Field _image:TImage
Field AlphaLevel:Float
Field Scale:Float
'instantiate and each object to List
Function Create:Image(strPath:String,startXpos:Int,startYpos:Int,imgAlpha:Float,imgScale:Float)
Local img:Image = New Image
img._image = LoadImage(strPath)
ImageListCount:+1
img.xpos = startXpos
img.ypos = startYpos
img.AlphaLevel = imgAlpha
img.Scale = imgScale
ListAddLast ImageList, img
End Function
'go thru each object, scale it and fade object
Method Update(img:Image)
Scale:+1.0
AlphaLevel:-0.1
If Scale >= 15.0 Then
ListRemove ImageList, img
Scale=1.0
AlphaLevel=1.0
EndIf
End Method
Method Render()
SetBlend ALPHABLEND
'For Local i:Image = EachIn ImageList
'Local current:TLink = ImageList.FirstLink()
'Local myImage:Image = Image(current._value)
Print "debug"
Local myImage:Image = Image(ImageList.First())
Print "1"
'MidHandleImage i._image
MidHandleImage myImage._image
SetScale Scale,Scale
SetAlpha AlphaLevel
'DrawImage i._image, (i.xpos), i.ypos
DrawImage myImage._image, (myImage.xpos), myImage.ypos
'Update(i)
Update(myImage)
'Exit
'Next
End Method
Method Reset()
If ListIsEmpty(ImageList) = True Then
LoadPieces()
EndIf
End Method
End Type
'main
While Not KeyHit(KEY_ESCAPE)
Cls
block.render()
'check to see if all objects are destroy; if so start over
block.reset()
Flip()
FlushMem()
Wend
'destroy i or blitz takes care of this for me when
'the program ends
block=Null
|
| ||
| Got it to work. Forgot to call the loadpieces function. |