It has become apparent that I will need to use roScreen in my program instead of roImageCanvas
in order to speed up my program, regarding layer in roImageCanvas, use the setLayer, clearLayer and swapLayer
but when i am using roScreen how i will remove layer that is in top or middle without remove the first layer.
I am giving code in that i want to remove middle layer that i.e "pkg:/images/2.jpg
sub main()
screen=createobject("roscreen",true)
'screen.setalphaenable(false)
screen.setalphaenable(true)
image1=createobject("robitmap","pkg:/images/1.jpg")
image2=createobject("robitmap","pkg:/images/2.jpg")
image3=createobject("robitmap","pkg:/images/3.jpg")
'lets set up some positions for these images:
obj1={posx:100,posy:100}
obj2={posx:200,posy:200}
obj3={posx:300,posy:300}
timer=createobject("rotimespan")
timer.mark()
while true
screen.setalphaenable(true)
screen.clear(&h000000ff)
screen.drawobject(obj1.posx,obj1.posy,image1)
screen.setalphaenable(false)
screen.drawobject(obj2.posx,obj2.posy,image2)
screen.setalphaenable(false)
screen.drawobject(obj3.posx,obj3.posy,image3)
screen.swapbuffers()
end while
end sub
Any suggestions?
You would just add an “if” statement to decide whether to draw the bitmap.
screen.clear(&h000000ff)
screen.drawobject(obj1.posx,obj1.posy,image1)
if should_draw_layer_2 then
screen.setalphaenable(false)
screen.drawobject(obj2.posx,obj2.posy,image2)
end if
screen.setalphaenable(false)
screen.drawobject(obj3.posx,obj3.posy,image3)
–Mark
Thanks, But I am already drawing three images using Bitmap in three layer In the given code, my requirement is that how to remove or hide the layer that is in top or middle without hide the first Image.
We are using roScreen to display a static map and on top of static map we are animating a group of 10 images for overlay.
Following is the code for animating the overlay image. Where m.mylocal contains path of 10 local images
Function Animate()
while true
m.screen.SetAlphaEnable(true)
for j=0 to 9 step 1
sleep(500)
bitmap=CreateObject("roBitmap", m.mylocal[j])
m.screen.DrawObject(0,0, bitmap)
m.screen.Finish()
end for
end while
end function
The problem is we are not able to remove the animating overlay images from the stack. so after some time the black screen is appearing on the screen.
Please advise how we can clear the stack of overlay without hiding static map.
First of all, you are doing something very inefficient which is creating the bitmaps at the same time you are drawing them. If they need to be animated, create an animated sprite from an array of regions, or create an array of bitmaps and draw those in your loop:
As to hiding images, you would want to have a conditional value in an array parallel to the bitmap array as to whether something should display or not. Here’s an example:
Function SetupAnimation()
m.screen.SetAlphaEnable(true)
m.animationArray=createobject("roArray",9,true)
m.drawarray=createobject("roArray",9,true)
for j=0 to 9 step 1
m.animationArray[j]=CreateObject("roBitmap", m.mylocal[j])
m.drawarray[j]=true
end for
end function
Function Animate()
animation_timer=createobject("rotimespan")
animation_timer.mark()
m.screen.SetAlphaEnable(true)
j=0
while true
if animation_timer.totalmilliseconds() >= 500 then
if m.drawarray[j] then
m.screen.DrawObject(0,0, bitmap)
end if
animation_timer.mark()
end if
j=j+1
if j > 9 then j=0
end while
end function
This way you can do other things and your UI won’t have to pause for 500ms for animation updates.