Get data form the first and last objects in a list
BlitzMax Forums/BlitzMax Beginners Area/Get data form the first and last objects in a list
| ||
Hi all, I need to get data from the first and last instances in my list but cannot work it out??? I am very new to this oop coding and although some of it is starting to make sense to me I really am fairly clueless on the logic of how it all works, so sorry if this is obvious. I have been trying to find the answer for too long and need help :) Here is an example of what I am trying to do using the Last() function. It’s for a text scroll and I need to read the X value to determine when to create the next character in the scroll. SeedRnd MilliSecs() Type TText Field X:Int=100 Field Y:Int=200 Global List:TList Function Create() Local New_Char:TText New_Char = New TText New_Char.X:+Rnd(0,100) New_Char.Y:+Rnd(0,100) If List = False Then List = CreateList() ListAddLast(List,New_Char) EndFunction EndType For Local c = 0 To 9 TText.Create() Next If List = Null Then End For Local Read:TText = EachIn TText.List Print Read.X Next Local Latest_Char:Object = TText.List.Last() Print Print Latest_Char.X The line: Latest_Char:Object = Ttext.List.Last() Compiles without error although it’s what I came up with after lots of trials and is probably wrong? Running the code gives an - Identifier (X) not found - on the last Print statement Any help is greatly appreciated |
| ||
Strict SeedRnd MilliSecs() Type TText Global List:TList '= New TList ' Can create the global TList when defined Field X:Int=100 Field Y:Int=200 Function Create() Local New_Char:TText New_Char = New TText New_Char.X:+Rnd(0,100) New_Char.Y:+Rnd(0,100) If List = Null Then List = CreateList() ' TText.List is an object not a variable so comparing to 'False' isn't valid ListAddLast(List, New_Char) EndFunction EndType For Local c = 0 To 9 TText.Create() Next If TText.List = Null Then End For Local Read:TText = EachIn TText.List Print Read.X Next '------------------------------ This ------------------------------ Local Latest_Char:Object = TText.List.Last() Print Print TText(Latest_Char).X ' Cast the base object to a TText object '----------------------------- Or This ----------------------------- 'Local Latest_Char:TText = TText(TText.List.Last()) ' Cast the base object to a TText object 'Print 'Print Latest_Char.X |
| ||
Hey Yan, Thanks for your help and for the extra info. Really appreciate that |
| ||
If you want to go oop, you should use List.AddLast(New_Char) You can also do this Method New() List.AddLast(Self) End Method Now all of that type will be in the list, even if you were to use different Create functions. Put common startup code in new. The second way Yan shows you is the prefered way. Create a local variable to hold a reference to it, and cast the Object that comes out of the list. If the list contains only that type (or types that derive from it) you can do it as shown. However, if you have a list which contains multiple unrelated types, the local variable will be Null after attempting to cast. You can use that to find out if the object returned was indeed a TText, or something else. Example, if you have a list which contains a mixture of TText and something else Local textobject:TText = TText(List.Last()) If textobject 'text object code End If |
| ||
Hi Czar, thanks for the info it's a great help. I can achieve what i want the old way but am determined to learn oop. It's slowly coming together.. Thanks again |