Michael,
Welcome to the wonderful world of OOP. Actually, your questions are
really about OOD (object oriented design).
I'm sorry, but I don't fully understand what your program is trying
to do. I'm sure that it's because I don't know enough about video
rather than your explanation of the program. But I may be able to
offer a few hints.
I think Brian's description of nouns and verbs is an excellent way to
help you design!
As for your specific problem, if you are new at OOP/OOD, stay away
from ancestors. It will only confuse you. From what I do understand
about what you are trying to do, you probably don't need them anyway.
In fact, I would probably do most of this work in a single object,
with messages fed by behaviors. That is, assuming that the user
works on only one sequence at a time, I would create a single global
instance of the "Sequence" object:
global goSequence -- global object sequence
on startMovie
goSequence = new(script "Sequence")
end
on stopMovie
goSequence.mCleanup() -- something to allow itself to clean up
goSequence = VOID
end
That way, any behaviors you have on buttons can simply refer to the
global object by name. For example, on your screen where the user
enters data into fields, there is probably some OK button. When the
user hits that button, you send a message to the goSequence object
telling it to start.
global goSequence
on mouseUp me
goSequence.mStart() -- ready to go
end
The mStart handler can check the user's input and see if it is OK to
go. If not, it can put out an error message. If everything is OK,
it can call some routine that really does the work. I know that my
view of your program is very simplistic, but here's a skeleton of how
I would build such a Sequence script:
property pnFrames -- number of frames to generate for this sequence
property pCurrentFrameNum -- the current frame number you are working on.
on new me
return me
end
on mStart me
-- Check if data in fields is OK to go
-- If not, put out error message and return
-- If OK, start processing
pnFrames = <some calculation based on above data>
pCurrentFrameNum = 0
append(the actorList, me)
end
-- The following assumes that you can generate one frame at a time
and this is not interruptable
on stepFrame me
pCurrentFrameNum = pCurrentFrameNum + 1
if pCurrentFrameNum > pnFrames then
deleteOne(the actorList, me)
return -- we're done
end if
-- Do whatever you have to do to process frame number pCurrentFrameNum
end
on mStopRightThereThatEnough me
deleteOne(the actorList, me)
pCurrentFrameNum = 0
end
on mCleanUp me
-- get us out of the actorList if we are in it
deleteOne(the actorList, me)
end
Then you can have a Stop button on the screen while processing the
frames that just has this script:
on mouseUp me
goSequence.mStopRightThereThatsEnough()
end
As far as the me.propertyName stuff goes, if you declare a property
and use it within the current script, you can choose to use "me." or
leave it off. That is:
property pSomePropertyName
on mSomeHandler me
pSomePropertyName = 1
-- and
me.pSomePropertyName = 1
-- will do exactly the same thing.
end
You only need to use "me.<some property name>" when the property is
not defined in the current script. This occurs in two places that I
can think of. 1) If you do not declare "property spriteNum" in a
behavior, then you need to say me.spriteNum (alternatively, you can
just declare it as a property and just use spriteNum), and 2) when
dealing with ancestors - since a property may be declared in an
ancestor but used in the current script, then you need to say
me.<some property name> to make the Lingo compiler understand that
this is a reference to a property.
Hope this helps rather than confuses the issue.
Irv
At 11:57 PM +0200 8/1/02, Michael von Aichberger wrote:
> >> It looks at the data and finds
>>> out what source images are needed.
>
>> I assume here you are referring to what "image frames" were specified by
>> the user. If so, I'll buy that.
>
>No, to give you a simplified description of what could be going on: The
>sequence could be a zoom into or a pan across one very large source image.
>With "source image" I referred to that large master image. But I think you
>still buy that.
>
>
>So each oFrame object has the code to create an image. In my simplied
>example, as the oFrame object is created, it gets a reference to the source
>image(s), which is/are a property/properties of oSequence. It then
>copyPixels a selection thus creating the wanted single image. Again: Would I
>pass the very large source image as a parameter? No need to make oSequence
>an ancestor to oFrame (to inherit the property source image)?
>
>
>> Sure, you could have a handler that looped through the frames and called
>> something like oFrame.destroy().
>
>How would the destroy method look like?
>I guess me = VOID wouldn't work well. Wouldn't it be sufficient to delete
>the reference to the object in pFrames?
>
>
>> Well, you could add the object to the actorList and then export an image
>> on each stepFrame event.
>
>Which object? oSequence or oFrame? If oFrame then I could have hundreds of
>instances, all getting the on stepFrame event and all trying to do their job
>at the same time. That wouldn't work, would it? So it's rather an on
>stepFrame method in oSequence that increments a counter, so that on every
>stepFrame event another frame is created. Am I right?
>
>I think I need this approach because the image export with the direct image
>Xtra may take some time and in an repeat loop of hundreds of image the user
>wouldn't have a chance to stop/cancel the process. The progress bar is a
>good idea though.
>
>Can this approach work like that?
>
>Another question yet, more general: I have seen code, where all properties
>were referenced with "me" like that: me.pFrames. What for?
>
>Thank you very much for all your help
>
>Michael
>
>[To remove yourself from this list, or to change to digest mode, go
>to http://www.penworks.com/lingo-l.cgi To post messages to the
>list, email [EMAIL PROTECTED] (Problems, email
>[EMAIL PROTECTED]). Lingo-L is for learning and helping with
>programming Lingo. Thanks!]
--
Lingo / Director / Shockwave development for all occasions.
(Home-made Lingo cooked up fresh every day just for you.)
[To remove yourself from this list, or to change to digest mode, go to
http://www.penworks.com/lingo-l.cgi To post messages to the list, email
[EMAIL PROTECTED] (Problems, email [EMAIL PROTECTED]). Lingo-L is for
learning and helping with programming Lingo. Thanks!]