Hi,
just trying to find out how the async Tag can help me. I have two layers. Both I do move.
Of course, if I dont do asynchronously they are doing it one step after another.
Now I use the async = true tag to make them move simultaniously. But they dont move.
Can I change that?
@DISPLAY {Mode = "Windowed", Width = 960, Height = 610}
EnableLayers()
CreateLayer(0, 0, 300, 300,{Color=#BLUE})
CreateLayer(30, 300, 145, 32,{Color=#GREEN})
WaitKeyDown("Return")
/*Moves Layers not snchronously, but moves*/
MoveLayer(1, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER)
MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER)
WaitKeyDown("Return")
/*Moving Layers back*/
MoveLayer(1, #USELAYERPOSITION, #USELAYERPOSITION, 0,0)
MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, 30,300)
WaitKeyDown("Return")
/*Does not move afterall*/
MoveLayer(1, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER,{Async=True})
MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER,{Async=True})
WaitKeyDown("Return")
Understanding asynchronus mode
Re: Understanding asynchronus mode
Hello,
I also had trouble trying to understand Asyncronous operation, but I think I'm understanding it a bit now. So others could do a better explanation. But this works for me from your example code. You have to call AsyncDrawFrame to actually show your async objects.
Using the Async=True tag you create an async draw object that has n frames ("object1" and "object2" in your example), which then need to be shown with the AsyncDrawFrame function. This function returns False if there are still frames to be drawn. Because object1 and object2 in your example move different distance, the frame number is not the same for both, so I check with different variables("done" and "finish") during the loop. The loop finishes when BOTH have drawn all its frames. Inside the loop, the conditional checks if each async object still have frames to draw before attempting to draw it, otherwise at some point it will error due to one not existing while the other still does.
Hope it helps you. Maybe someone can show us a better way.
I also had trouble trying to understand Asyncronous operation, but I think I'm understanding it a bit now. So others could do a better explanation. But this works for me from your example code. You have to call AsyncDrawFrame to actually show your async objects.
Code: Select all
@DISPLAY {Mode = "Windowed", Width = 960, Height = 610}
EnableLayers()
CreateLayer(0, 0, 300, 300,{Color=#BLUE})
CreateLayer(30, 300, 145, 32,{Color=#GREEN})
WaitKeyDown("Return")
/*Moves Layers not snchronously, but moves*/
MoveLayer(1, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER)
MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER)
WaitKeyDown("Return")
/*Moving Layers back*/
MoveLayer(1, #USELAYERPOSITION, #USELAYERPOSITION, 0,0)
MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, 30,300)
WaitKeyDown("Return")
/*
* Changes begin here
*/
/*Does not move YET*/
object1 = MoveLayer(1, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER,{Async=True})
object2 = MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER,{Async=True})
/*Here it moves your layers*/
Repeat
If Not done Then done = AsyncDrawFrame(object1)
If Not finish Then finish = AsyncDrawFrame(object2)
VWait
Until (done = True And finish = True)
WaitKeyDown("Return")
Hope it helps you. Maybe someone can show us a better way.
PowerBook 5.2 MorphOS 3.15
PowerBook 5.8 MorphOS 3.15
Amiga 1200 BPPC/BVision AOS4.1 FE
PowerBook 5.8 MorphOS 3.15
Amiga 1200 BPPC/BVision AOS4.1 FE
Re: Understanding asynchronus mode
Hey, great. It works and its a very good explanation. Brings me really forward.
Re: Understanding asynchronus mode
Just to continue the madness ... .. btw how do you display the code segments properly?
@DISPLAY {Mode = "Windowed", Width = 960, Height = 610,Color=#WHITE}
@FONT 1, "Arial",32
EnableLayers()
CreateLayer(0, 0, 300, 300,{Color=#BLUE})
CreateLayer(30, 300, 145, 32,{Color=#GREEN})
CreateLayer(60, 200, 245, 64,{Color=#RED})
LayerToFront(1, noswap=False)
WaitKeyDown("Return")
/*Moves Layers not synchronously, but moves*/
MoveLayer(1, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER)
MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER)
SetLayerBorder(1, True, #BLACK,10)
WaitKeyDown("Return")
/*Moving Layers back*/
SetLayerShadow(2, True, ARGB(128, $00ff00),6,7,3)
LayerToFront(1, noswap = False)
MoveLayer(3, #USELAYERPOSITION, #USELAYERPOSITION, 10,10)
MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, 30,300)
WaitKeyDown("Return")
/*using not the asynchronous mode*/
x1= 0
x2 = 30
For i = 1 To 500
ShowLayer(1, x1+i,#USELAYERPOSITION)
ShowLayer(2, x2+i,#USELAYERPOSITION)
Next
WaitKeyDown("Return")
SetLayerShadow(2, True, ARGB(128, #BLACK),6,7,3)
/*Using the asynchronous Layer. Thanks to emmeck very much*/
object1 = MoveLayer(1, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER,{Async=True})
object2 = MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER,{Async=True})
/*Here it moves your layers*/
Repeat
If Not done Then done = AsyncDrawFrame(object1)
If Not finish Then finish = AsyncDrawFrame(object2)
VWait
Until (done = True And finish = True)
WaitKeyDown("Return")
@DISPLAY {Mode = "Windowed", Width = 960, Height = 610,Color=#WHITE}
@FONT 1, "Arial",32
EnableLayers()
CreateLayer(0, 0, 300, 300,{Color=#BLUE})
CreateLayer(30, 300, 145, 32,{Color=#GREEN})
CreateLayer(60, 200, 245, 64,{Color=#RED})
LayerToFront(1, noswap=False)
WaitKeyDown("Return")
/*Moves Layers not synchronously, but moves*/
MoveLayer(1, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER)
MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER)
SetLayerBorder(1, True, #BLACK,10)
WaitKeyDown("Return")
/*Moving Layers back*/
SetLayerShadow(2, True, ARGB(128, $00ff00),6,7,3)
LayerToFront(1, noswap = False)
MoveLayer(3, #USELAYERPOSITION, #USELAYERPOSITION, 10,10)
MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, 30,300)
WaitKeyDown("Return")
/*using not the asynchronous mode*/
x1= 0
x2 = 30
For i = 1 To 500
ShowLayer(1, x1+i,#USELAYERPOSITION)
ShowLayer(2, x2+i,#USELAYERPOSITION)
Next
WaitKeyDown("Return")
SetLayerShadow(2, True, ARGB(128, #BLACK),6,7,3)
/*Using the asynchronous Layer. Thanks to emmeck very much*/
object1 = MoveLayer(1, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER,{Async=True})
object2 = MoveLayer(2, #USELAYERPOSITION, #USELAYERPOSITION, #CENTER, #CENTER,{Async=True})
/*Here it moves your layers*/
Repeat
If Not done Then done = AsyncDrawFrame(object1)
If Not finish Then finish = AsyncDrawFrame(object2)
VWait
Until (done = True And finish = True)
WaitKeyDown("Return")
Re: Understanding asynchronus mode
For the code segment, you have to use the [_code] and [_/code] tags but without the underscore, like this:
[_code]
Your code here
[_/code]
And removing the undescore it shows:
[_code]
Your code here
[_/code]
And removing the undescore it shows:
Code: Select all
Your code here
PowerBook 5.2 MorphOS 3.15
PowerBook 5.8 MorphOS 3.15
Amiga 1200 BPPC/BVision AOS4.1 FE
PowerBook 5.8 MorphOS 3.15
Amiga 1200 BPPC/BVision AOS4.1 FE