can you simulate your problem in someway and post the code.. i am much more efficient in fixing the problem when i see one .. :)
regards, Varun Shetty On Wed, Mar 5, 2008 at 1:57 PM, Brian <[EMAIL PROTECTED]> wrote: > Hi, thanks for your reply. What is the importance of ending the effect? > > I tried creating a canvas outside the main canvas, and putting the > iris effects on that canvas. It didn't appear to make a difference. > > I put the loop in to _simulate_ the work that my app is doing in the > middle of the sequence, which I thought was the cause of the delay in > the 2nd effect. I'm using the startDelay property. > > When I use the startDelay property, it almost works. However, during > the pause between the effects, the canvas is drawn onto the screen > when the updates are done, and then the 2nd effect runs. I thought > that setting autoLayout = false was supposed to prevent this. > > How can I update that canvas and not have it drawn on the screen? > > > --- In flexcoders@yahoogroups.com <flexcoders%40yahoogroups.com>, "Varun > Shetty" <[EMAIL PROTECTED]> wrote: > > > > heya ... > > > > > > well couple of things i did.. > > cleaned ur code.. 'cause i dont like it with warnings on my flex .. > :D (u > > dont have to do it) > > created a canvas outside the map.. since u are doing too many things > on the > > map canvas . i would recommend keeping it separate from the iris > effect.. > > also you need to end your effects effectively. > > i would never recommend putting a for loop to simulate a delay. there is > > startDelay property to make a delay. > > > > check the script below .. mebbe it solves ur problem. > > > > > > > > <?xml version="1.0" encoding="utf-8"?> > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > > layout="absolute" creationComplete="initApp()"> > > <mx:Script> > > <![CDATA[ > > import mx.events.EffectEvent; > > import mx.controls.Button; > > > > private function initApp():void { > > irisHideCanvas.addEventListener(EffectEvent.EFFECT_END, > > handleIrisEnd); > > irisShowCanvas.addEventListener(EffectEvent.EFFECT_START, > > handleIrisStart); > > irisShowCanvas.addEventListener(EffectEvent.EFFECT_END, > resetAll); > > } > > > > private function addImages():void { > > for(var i:int = 0; i<50; i++) { > > var button:Button = new Button(); > > button.label = "Button " + i; > > button.x = getIntBetween(0, map.width); > > button.y = getIntBetween(0, map.height); > > map.addChild(button); > > } > > } > > private function resetAll(event:EffectEvent):void { > > irisHideCanvas.end(); > > irisShowCanvas.end(); > > } > > private function clearAndNew():void { > > irisHideCanvas.end(); > > irisShowCanvas.end(); > > irisHideCanvas.play(); > > } > > private function handleIrisStart(event:EffectEvent):void { > > map.visible = true; > > } > > // try to clear all the map's children AFTER the irisHideCanvas > > //effect is done > > private function handleIrisEnd(event:EffectEvent):void { > > map.removeAllChildren(); > > map.visible = false; > > addImages(); > > irisShowCanvas.play(); > > } > > > > // returns an int 0 <= result < top > > private function nextInt(top:int):int { > > var temp:int = Math.round(Math.random()*1000); > > return temp % top; > > } > > > > private function getIntBetween(bottom:int, top:int):int { > > if(bottom >= top) { > > return bottom; > > } else { > > return bottom + nextInt(10000) % (1+top-bottom); > > } > > } > > > > ]]> > > </mx:Script> > > <mx:Iris id="irisHideCanvas" duration="1000" showTarget="false" > > target="{outerCanvas}" /> > > <mx:Iris id="irisShowCanvas" startDelay="500" duration="1000" > > showTarget="true" target="{outerCanvas}"/> > > <mx:Canvas id="outerCanvas"> > > > > <mx:Canvas id="map" x="10" y="10" width="360" height="201" > > backgroundColor="#000000" visible="{cb1.selected}" > > > > > > > </mx:Canvas> > > </mx:Canvas> > > <mx:Button x="58" y="219" label="Add Images" click="addImages()"/> > > <mx:Button x="160" y="219" label="Clear Images" click="clearAndNew()"/> > > <mx:CheckBox id="cb1" x="266" y="221" label="visible" selected="true"/> > > > > </mx:Application> > > > > On Mon, Mar 3, 2008 at 12:36 PM, Brian <[EMAIL PROTECTED]> wrote: > > > > > I posted this last Friday. I'm bumping to try to get you smart > people > > > to take another look at this, earlier in the week; hope that's ok. > > > > > > > > > --- In flexcoders@yahoogroups.com > > > <flexcoders%40yahoogroups.com><flexcoders%40yahoogroups.com>, > > "Brian" > > > <briforge@> wrote: > > > > > > > > I'm trying to get a sequence of Iris effects working. I think > I'm this > > > > '' close but just have one bug I can't squash. I made the following > > > > example to post here to show what I'm doing, but unfortunately it's > > > > not reproducing the error. > > > > > > > > What I've got is a Canvas full of objects. At a certain point, I > want > > > > to wipe (not the effect) the canvas clean, and then re-populate it > > > > with a few new objects. I'm doing a sequence of Iris effects to hide > > > > the canvas, then do the processing of removing objects and > adding new > > > > ones, then use the iris effect to re-show the canvas. > > > > > > > > The bug is, there is a delay on the iris effect when showing the > > > > canvas. It often re-appears about halfway done, instead of the > smooth > > > > hide-and-show in this example. I thought the event handling of the > > > > handleIrisHideEnd with the pause and resume would have taken care of > > > > this, but it acts as if there is no pause, and the > removing-and-adding > > > > of canvas objects is happening at the same as the 2nd iris effect. > > > > > > > > Any ideas? > > > > > > > > Thanks > > > > > > > > <?xml version="1.0" encoding="utf-8"?> > > > > <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" > > > > layout="absolute" creationComplete="initApp()"> > > > > <mx:Script> > > > > <![CDATA[ > > > > import mx.events.EffectEvent; > > > > import mx.controls.Button; > > > > > > > > function initApp() { > > > > irisHideCanvas.addEventListener(EffectEvent.EFFECT_END, > > > > handleIrisEnd); > > > > } > > > > > > > > function addImages() { > > > > for(var i:int = 0; i<5; i++) { > > > > var button:Button = new Button(); > > > > button.label = "Button " + i; > > > > button.x = getIntBetween(0, map.width); > > > > button.y = getIntBetween(0, map.height); > > > > map.addChild(button); > > > > } > > > > } > > > > > > > > function clearAndNew() { > > > > irisSequence.play(); > > > > } > > > > > > > > // try to clear all the map's children AFTER the irisHideCanvas > > > > effect is done > > > > function handleIrisEnd(event:EffectEvent) { > > > > irisSequence.pause(); > > > > map.removeAllChildren(); > > > > for(var i:int = 0; i < 100000; i++) { > > > > // trying to simulate long processing > > > > } > > > > addImages(); > > > > irisSequence.resume(); > > > > } > > > > > > > > // returns an int 0 <= result < top > > > > function nextInt(top:int):int { > > > > var temp:int = Math.round(Math.random()*1000); > > > > return temp % top; > > > > } > > > > > > > > function getIntBetween(bottom:int, top:int):int { > > > > if(bottom >= top) { > > > > return bottom; > > > > } else { > > > > return bottom + nextInt(10000) % (1+top-bottom); > > > > } > > > > } > > > > > > > > ]]> > > > > </mx:Script> > > > > <mx:Sequence id="irisSequence"> > > > > <mx:Iris id="irisHideCanvas" duration="1000" showTarget="false" > > > > target="{map}"/> > > > > <mx:Iris id="irisShowCanvas" duration="1000" showTarget="true" > > > > target="{map}"/> > > > > </mx:Sequence> > > > > > > > > <mx:Canvas id="map" x="10" y="10" width="360" height="201" > > > > backgroundColor="#000000" visible="{cb1.selected}" > > > > showEffect="{irisShowCanvas}" hideEffect="{irisHideCanvas}" > > > > > </mx:Canvas> > > > > <mx:Button x="58" y="219" label="Add Images" click="addImages()"/> > > > > <mx:Button x="160" y="219" label="Clear Images" > click="clearAndNew()"/> > > > > <mx:CheckBox id="cb1" x="266" y="221" label="visible" > selected="true"/> > > > > > > > > </mx:Application> > > > > > > > > > > > > > > > > > >