Function causes a crash
-
@DaddyJDM I get an error for attempting to index non array type
-
@Hector1945 wow, the response time is quite fast here 😄 @Gothon +1, @DaddyJDM +1 even go with:
trail[0]=[] //the first time trail[0][0]={} //the first time trail[0][0].x=ball.x trail[0][0].y=ball.y
-
@spikey Why do I get a "unrecognized type: 4" on the line 79 ?
-
There is actually another caveat. If
len(trail)
is1
, the loop will becomefor i = 0 to 0
flipping to positive direction and not iterate. There are a couple ways of avoiding this problem. You can write awhile
loop or usefor j = 0 to len(trail) loop i = len(trail) - 1 - j
Though I notice that your loop uses both
trail[i]
andtrail[i+1]
, so you probably need to write it as:for j = 0 to len(trail)-1 loop i = len(trail) - 2 - j ... repeat
so that it loops
len(trail)-2
through0
since anything outside that range will give you an out of bounds array index. -
So I tried replacing
for i = len(trail)-1 to -1 step -1 loop
with
for i = len(trail)-1 to 0 loop
and starting the game with 2 values already in the array, and the trail works, but I still get the crash...
-
@Hector1945 said in Function causes a crash:
but I still get the crash...
Right the first value of
i
islen(trail)-1
=1
andi+1
=2
which is out of bounds for an array of size 2 (the valid indices are0
,1
). Since you are writingtrail[i+1]
, you need to start the loop withfor i = len(trail)-2 ...
. -
I had ’unrecognised type’ error before when accessing an array. Martin said to change the iterator Name to something unique (the ’x’ in ’for x = 0 to..’), and that worked. It was a fuze bug, not something I’d done that time...
-
@Gothon Wouldn't I get an error if it was out of bounds ? Because the crash only occurs like 20 seconds in the game, way after the array gets completely filled with 50 values...
-
@Hector1945 I agree that Fuze should give you an out of bounds error, but when Fuze itself is crashing it is difficult to know what to expect. It can be tricky to trace back to the cause of undefined behaviors.
-
If I do the len(trail)-2 it does not crash but the trail doesn't display properly
-
Oh ok it just didn't execute the command because len(trail)-2 = 0 if trail has 2 values
-
@Hector1945 Glad you solved it , the unrecognized type 4 error probably went from adding a value to a not properly initialized array (or reading from a such). (Because of wrong dimension, index). Is it technically a 'void' type? What means its just pointing to a place in memory, but its not clear yet, what the bytes mean there: number, string, array. If somebody knows for sure please comment on this. It would be nice to know for sure.
-
Oh no it isn't solved ! I now have a lead though, because apparently it does come from the trail[0] = [{ball.x,ball.y},moving] because if I replace that line by trail[0] = 5 or any random int, then it doesn't crash ! I just don't know how to solve it, because when I try I get an unrecognised type 4 error.
-
Ok, is
moving
a global variable? To test if this is the problem, add a line before:
moving = false
Which will make sure it is declared implicitly as a boolean and defined as false. -
I tried, and it still crashes.
-
What is
trail[0] = [{ball.x,ball.y},moving]
supposed to accomplish anyway?It looks like you are assigning an array containing a vector and something else to trail[0]?
And then you treat the result as an int?
-
No I treat the result as an array of a vector and a boolean. The vector is used to log the 50 most recent positions of the ball, in order to make a trail that follows the exact path of the ball, like in the reference video. The "moving" boolean is used to determine if a trail should actually be drawn to that point. There might be a better way of doing this, but I haven't figured it out.
-
Sorry, I didn’t read the code properly. Now I see how you do it.
Not sure if it would help, but maybe using a struct would be better and then having an array of structs instead?
-
Did you change the loop? Backwards loops in Fuze do not work as one would suspect.
I find it is always better to use a while loop instead and handling the counter yourself in those cases.
-
You mean making a for() loop as a while() ?