B4J Question Adding a Type to a List

Johan Schoeman

Expert
Licensed User
Longtime User
I have the strangest problem and just cannot get me head around it. I the attached project I have 3 rotating vectors (used a Type to create them). I do various calcs determine the new start and end position of each vector and them move them in the timer sub.

I use a List to store vec(2) in the list (just add recalculated vec(2) one by one as what the timer ticks). vec(2) is recalculated on every timer tick.

When I log vec(2) before adding it to the list (I have actually assigned vec(2) to myvec to see if it would solve the issue) vec(2) is different during each timer tick as what should be the case. But when I log the entries of the list in a for/next loop all the entries in the list have the same values which are the values of the last vec(2) that was calculated.

What am I missing here?


B4J Log:
************* GOING TO ADD THIS VECTOR **********
[IsInitialized=true, beginX=439.40389973700553, beginY=309.7465785725866
, endX=475.0441607045402, endY=291.58695858300473, length=40.0
]
*************************************************
2
[IsInitialized=true, beginX=439.40389973700553, beginY=309.7465785725866
, endX=475.0441607045402, endY=291.58695858300473, length=40.0
]
[IsInitialized=true, beginX=439.40389973700553, beginY=309.7465785725866
, endX=475.0441607045402, endY=291.58695858300473, length=40.0
]
 
 
************* GOING TO ADD THIS VECTOR **********
[IsInitialized=true, beginX=437.6269679178268, beginY=319.33020108522
, endX=461.1383780095257, endY=286.9695213102221, length=40.0
]
*************************************************
3
[IsInitialized=true, beginX=437.6269679178268, beginY=319.33020108522
, endX=461.1383780095257, endY=286.9695213102221, length=40.0
]
[IsInitialized=true, beginX=437.6269679178268, beginY=319.33020108522
, endX=461.1383780095257, endY=286.9695213102221, length=40.0
]
[IsInitialized=true, beginX=437.6269679178268, beginY=319.33020108522
, endX=461.1383780095257, endY=286.9695213102221, length=40.0
]
 
 
************* GOING TO ADD THIS VECTOR **********
[IsInitialized=true, beginX=434.70309023892196, beginY=328.5910750839835
, endX=440.9604688405312, endY=289.083541460178, length=40.0
]
*************************************************
4
[IsInitialized=true, beginX=434.70309023892196, beginY=328.5910750839835
, endX=440.9604688405312, endY=289.083541460178, length=40.0
]
[IsInitialized=true, beginX=434.70309023892196, beginY=328.5910750839835
, endX=440.9604688405312, endY=289.083541460178, length=40.0
]
[IsInitialized=true, beginX=434.70309023892196, beginY=328.5910750839835
, endX=440.9604688405312, endY=289.083541460178, length=40.0
]
[IsInitialized=true, beginX=434.70309023892196, beginY=328.5910750839835
, endX=440.9604688405312, endY=289.083541460178, length=40.0
]
 
 
************* GOING TO ADD THIS VECTOR **********
[IsInitialized=true, beginX=430.68800979017146, beginY=337.37567375352234
, endX=418.3273300151736, endY=299.3334131017162, length=40.0
]
*************************************************
5
[IsInitialized=true, beginX=430.68800979017146, beginY=337.37567375352234
, endX=418.3273300151736, endY=299.3334131017162, length=40.0
]
[IsInitialized=true, beginX=430.68800979017146, beginY=337.37567375352234
, endX=418.3273300151736, endY=299.3334131017162, length=40.0
]
[IsInitialized=true, beginX=430.68800979017146, beginY=337.37567375352234
, endX=418.3273300151736, endY=299.3334131017162, length=40.0
]
[IsInitialized=true, beginX=430.68800979017146, beginY=337.37567375352234
, endX=418.3273300151736, endY=299.3334131017162, length=40.0
]
[IsInitialized=true, beginX=430.68800979017146, beginY=337.37567375352234
, endX=418.3273300151736, endY=299.3334131017162, length=40.0
]
 
 
************* GOING TO ADD THIS VECTOR **********
[IsInitialized=true, beginX=425.6582424344783, beginY=345.539716001005
, endX=397.3739711870164, endY=317.2554447535431, length=40.0
]
*************************************************
6
[IsInitialized=true, beginX=425.6582424344783, beginY=345.539716001005
, endX=397.3739711870164, endY=317.2554447535431, length=40.0
]
[IsInitialized=true, beginX=425.6582424344783, beginY=345.539716001005
, endX=397.3739711870164, endY=317.2554447535431, length=40.0
]
[IsInitialized=true, beginX=425.6582424344783, beginY=345.539716001005
, endX=397.3739711870164, endY=317.2554447535431, length=40.0
]
[IsInitialized=true, beginX=425.6582424344783, beginY=345.539716001005
, endX=397.3739711870164, endY=317.2554447535431, length=40.0
]
[IsInitialized=true, beginX=425.6582424344783, beginY=345.539716001005
, endX=397.3739711870164, endY=317.2554447535431, length=40.0
]
[IsInitialized=true, beginX=425.6582424344783, beginY=345.539716001005
, endX=397.3739711870164, endY=317.2554447535431, length=40.0
]
 
 
************* GOING TO ADD THIS VECTOR **********
[IsInitialized=true, beginX=419.70958801099334, beginY=352.95096659005594
, endX=381.6673273591872, endY=340.59028681505805, length=40.0
]
*************************************************
7
[IsInitialized=true, beginX=419.70958801099334, beginY=352.95096659005594
, endX=381.6673273591872, endY=340.59028681505805, length=40.0
]
[IsInitialized=true, beginX=419.70958801099334, beginY=352.95096659005594
, endX=381.6673273591872, endY=340.59028681505805, length=40.0
]
[IsInitialized=true, beginX=419.70958801099334, beginY=352.95096659005594
, endX=381.6673273591872, endY=340.59028681505805, length=40.0
]
[IsInitialized=true, beginX=419.70958801099334, beginY=352.95096659005594
, endX=381.6673273591872, endY=340.59028681505805, length=40.0
]
[IsInitialized=true, beginX=419.70958801099334, beginY=352.95096659005594
, endX=381.6673273591872, endY=340.59028681505805, length=40.0
]
[IsInitialized=true, beginX=419.70958801099334, beginY=352.95096659005594
, endX=381.6673273591872, endY=340.59028681505805, length=40.0
]
[IsInitialized=true, beginX=419.70958801099334, beginY=352.95096659005594
, endX=381.6673273591872, endY=340.59028681505805, length=40.0
]
 
 
************* GOING TO ADD THIS VECTOR **********
[IsInitialized=true, beginX=412.9552663395506, beginY=359.4918018257143
, endX=373.4477327157451, endY=365.7491804273235, length=40.0
]
*************************************************
8
[IsInitialized=true, beginX=412.9552663395506, beginY=359.4918018257143
, endX=373.4477327157451, endY=365.7491804273235, length=40.0
]
[IsInitialized=true, beginX=412.9552663395506, beginY=359.4918018257143
, endX=373.4477327157451, endY=365.7491804273235, length=40.0
]
[IsInitialized=true, beginX=412.9552663395506, beginY=359.4918018257143
, endX=373.4477327157451, endY=365.7491804273235, length=40.0
]
[IsInitialized=true, beginX=412.9552663395506, beginY=359.4918018257143
, endX=373.4477327157451, endY=365.7491804273235, length=40.0
]
[IsInitialized=true, beginX=412.9552663395506, beginY=359.4918018257143
, endX=373.4477327157451, endY=365.7491804273235, length=40.0
]
[IsInitialized=true, beginX=412.9552663395506, beginY=359.4918018257143
, endX=373.4477327157451, endY=365.7491804273235, length=40.0
]
[IsInitialized=true, beginX=412.9552663395506, beginY=359.4918018257143
, endX=373.4477327157451, endY=365.7491804273235, length=40.0
]
[IsInitialized=true, beginX=412.9552663395506, beginY=359.4918018257143
, endX=373.4477327157451, endY=365.7491804273235, length=40.0
]
 

Attachments

  • b4jMathArt.zip
    2.4 KB · Views: 124

Erel

B4X founder
Staff member
Licensed User
Longtime User
From a quick glance, the problem is probably here:
B4X:
Dim myvec As Vector
myvec.Initialize
myvec = vec(2) 'this line will not copy the fields of vec(2), it will make myvec reference the same object as vec(2).

You can make a sub that makes a copy of a vector:
B4X:
Public Sub CopyVec(vec As Vector)
 'Type Vector(beginX As Double, beginY As Double, endX As Double, endY As Double, length As Double)
 Return CreateVector(beginX, beginY, endX, endY, length)

And if you don't have a CreateVector sub then create it by hovering over the type declaration.
 
Upvote 0

Erel

B4X founder
Staff member
Licensed User
Longtime User
This is indeed an option.

It is especially useful for more complex types, with lists and maps and so on.
 
Upvote 0
Top