Everyone is always learning. I'd say that its difficult to draw a line to
distinguish when someone is professional or when someone is amateur, but
generally I would say that every project you create makes you more
comfortable with the language (I hope!) and exposes you to more problems
and solutions. With time, you'll be exposed to more and more of the total
possible problems, solutions and applications one could create with Flash.
Looking back at my own experience, I'd say that the jump to "feeling"
professional occurred when I no longer stumbled over the "how", and became
proficient enough that more and more of my time started surrounding the
"what" ... the "how" was less daunting and more obvious at that point. I'd
say that every developer has milestones as well that they cross that stand
out as proud achievements. I've built a few projects and libraries that
feel that way to me.
FlashDevelop really accelerated my experience with Actionscript 3. I used
Actionscript for 5 or 6 years before the alpha for AS3 was first released.
It was probably a couple years afterward that things started to really
take off for me.
In addition to FlashDevelop, using my own code library became a big
catalyst to going deeper with Flash. Instead of writing new code for each
project, or trying to copy from one project to the next, I began using a
global classpath with my own "code library" of re-usable classes and
global functions I started to create. You can set the Project panel to
show global classpaths, so its just as easy to write code in the global
location as it would be within the project. This process helped me to
pinpoint code which would be written in a reusable way, so I started to
write my own components and to develop them further with each project.
Over time this grew to include a wide variety of useful libraries for
loading files, playing sounds in games, fluid resizing, game character
animations, tweens and eventually an Away3D + Box2D snap-and-build layout
framework for some of my larger clients. Instead of reinventing the wheel,
I could improve on it with each project, helping me dig much further into
interfaces, namespaces, static methods and other language features I
wouldn't have otherwise needed, but that helped me to improve the utility
of my code library.
Like the old man insists in Toy Story 2, "you can't rush art." Everything
takes time. To develop work faster is part experience but also partly
being clever. I've heard another person say that he wouldn't want to hire
a carpenter if he were building furniture for a stage play. Fact is, the
carpenter will build the table the "way it should be built," but he can't
afford that. It just needs to look right ... it doesn't need to last
forever, just until the last showing. Part of working quickly is learning
the balance between where you should invest in building things "right",
and where you should allow yourself to fake it, or to be messier. You also
learn how to develop in such a way that you don't box yourself in with
poor decisions. If you set yourself out in the right direction, every step
you take can expand and grow that project. If you make poor decisions, you
may have to go back and rewrite everything.
If you make a light, give it a light bulb and a light switch. If you need
to switch it off later, it'll be easy to do. You won't have to tear open
the wall to get to the wires. If the bulb goes out, you won't have to
replace the fixture. On the flip side, a toaster on the counter doesn't
need to handle every single kind of bread. If it breaks you can get
another one. In the same way, give yourself "switches" so you aren't stuck
with stubborn code (just to implement a client's change) but don't
over-engineer everything. Sometimes its okay to have a normal pen, and not
to make a super astronaut pen that can write upside down in space.
You may be surprised with Flash's performance. Try and approach your
project one step at a time. Get the basics working, then improve on it. If
you task yourself with too many features at once, it may be difficult to
think clearly and move forward. I've used Away3D enough to say that it is
solid, and I think its a good choice for the project you're thinking of.
Don't try and re-engineer the library, though. Let it do what it says it
does. If it works terrible, there may be a bug that someone else wants to
fix. You don't have to fix everything yourself.
Switching between high and low quality renders and being picky about when
you re-render can make the difference for improving performance. Get your
project working, then refine it more to eek out even more performance. Be
careful not to optimize too early. Get it working, then get it working
faster.
The extra stuff you aren't using shouldn't be slowing Away3D down. Don't
worry. Go ahead and make your custom classes, but also think if there's a
"dead simple" way to build what you want, using the classes that already
exist. For example, you could take your bitmap, cut it into pieces, then
use multiple planes. Levels of detail, instead of being wrapped up in the
same class, could be multiple cubes or sets of faces that you hide or
show. When you pan, you just change the position and rotation of each
object simultaneously. Remember that "big things" are made up of simple,
well-built small things.
Projects will also run (notably!) faster if you compile for Release
instead of Debug.
Please take or leave anything I'm saying here ... I may be repeating the
very things you already know, feel, or are actually doing. If I were to
approach a project like this myself, I would first determine which classes
or functions are already available which may already do (or almost do)
what I want it to. Find Away3D panoramic examples. I would then consider
using these existing classes, extending them, or combining them to add
additional functionality. Like I said before, instead of a complex mesh
with multiple faces, maybe use multiple objects. Instead of getting into
complicated circular math, maybe I would use Point.polar so I could move
objects in polar coordinates (which might be really easy) and to let Flash
convert them to Cartesian coordinates for me.
If you really want it to do all the features you're looking for, it will
take some time. A good development process, on something that hasn't been
done before (or is complex, and hasn't been done by yourself before), will
usually include a combination of roadblocks, breakthroughs, progress and
roadblocks. Just try and stick to the narrow, straight path that gets you
to your destination, and not to be too distracted by "nice to have"
features or things that are auxillary to your primary goal. It's easier to
get from A to B, building a straightforward solution to your problem, then
adding additional features, than to start with every feature under the sun
on day 1, and trying to get that to a working end.
On Sun, 26 Dec 2010 12:12:55 -0800, rctdeclan <[email protected]>
wrote:
Hi Joshua,
What is your opinion on experience? e.g. When is somebody a
professional developer?
How long did it take you guys to feel comfortable with coding as3, and
especially understanding precisely how Away3D works?;
How much projects have you done?
How much time do you spend on a project per day or per month?
Do you work in a team?
I'm trying to get an idea whether I'm taking the right steps...
For example this project which I've been working on for more than
three months:
My goal was to make a Panorama viewer:
-with multiresolution cubical panorama support
-with Hotspot navigation
-Zoomify-like Flat panorama's
-Panorama video (with VideoMaterial class)
-Partial panorama's
-VRObject viewing
-multitouch
-optionally using some sort of PHP connection to a database.
-Lightning fast.
Why? Well I've been making Virtual Tours for almost two years now.
I've tried several panoramic viewers, but unfortunately, they don't
fit my needs. (Not-extendable, not as3-compatible)
How?
-Using Flex MXML for data and AS3 for various pano classes.
-Using Away3dLite
So I made a plan:
1. Read the "3D in Flash" book.
2. Dig through the code of the Mesh class.
3. Understand materials, and know how to load them at runtime.
(Partial tile loading)
4. Keyboard/ Mouse controls
5. Make Multtiresolution Cube Panorama Class.
6. Make Hotspot Class.
7. Make Partial Spherical Panorama Class.
But I bumped into the following questions:
-How can I use multiple materials on a Mesh --> Solved; apply material
to each face individually.
-How do I know which cube(sub)faces are currently being viewed, for
loading?
-How can I update only certain faces in the Mesh class, without
updating the whole mesh?
And lastly, I'm never sure about the speed and performance of the
flash player.
If I use the debugger in FB, and I run the code step by step, I don't
understand how the Flash Player can handle the amount of commands that
come by every second.
Does the extra code within Away3dLite's classes (extra code; Lights,
shaders, etc..) which I don't use have an (Serious) impact on the
performance? Remember, my goal was to make this viewer Lightning
fast...
That's why I'm trying to understand what Object3D.project(),
ObjectContainer3D.project() and Mesh.project() actually do. (Matrix
calculations, projection plane, etc...)
So my question are:
-How do you begin a project; Is it similar to the way I started my
project?
-How to know if cube(sub)faces are viewed or not?
-Is it possible to update only certain faces (delete, replace) in a
mesh?
-Do you guys have some links to tutorials or pages about how Matrix
projections are calculated?
( I already found these:
http://www.codeproject.com/KB/openGL/Space_Matrix.aspx
http://ocw.mit.edu/courses/mathematics/18-06-linear-algebra-spring-2010/video-lectures/
)
Thanks in advance,
Declan
On Dec 26, 8:15 pm, "Joshua Granick" <[email protected]>
wrote:
A couple things:
- FlashDevelop. Using FlashDevelop instead of Flash (and instead of
Flash Builder, in my opinion), is a huge boost in productivity. Instead
of having to memorize classes and methods, the code completion and
other language features allow you to use the language before its been
committed to memory. Over time it becomes more and more familiar, but
until then, you can leap into AS3 (and libraries like Away3D) without
a lot of study
- Maya + OpenCollada. I had a hard time getting into Away3D
development (beyond cubes and spheres) because I couldn't find a good
pipeline for generating 3D models and importing them into Away3D
reliably. Other developers could chime in here, but for all the formats
and applications I tried (SketchUp, Blender, Milkshape 3D, Misfit Model
3D) the only one that truly worked for me all-around was using Maya
plus the OpenCollada plugin (with triangulation enabled) for exports.
Maya is prohibitively expensive, so I'm sure there are other
applications that can work, but this was when my experience with Away3D
took off. It's exciting when you can create a mesh, use a UV editor to
wrap your texture, and have it load correctly in Away3D. Other formats
and applications may be different, but in Away3D + OpenCollada, .1 unit
= 1 pixel (if I remember correctly). When testing formats, always
remember to test with something like a WireColorMaterial, and play with
the scale. You may be loading your model correctly, but can't see it
because the material isn't appearing, or because the scale is so small
or so large.
- Class-based development in AS3. If you aren't doing it already, get
comfortable with using classes. When learning a language it can be
easier to begin with procedural programming (like you would do on a
frame, coding in the Flash IDE) but a class-based architecture really
pays off in the long run. Using FlashDevelop really helps make this
easier (the Project panel is awesome for always maintaining the
context of all the files in your project)
- Common-sense development. There's also some "common-sense"
principles that really help in development. Don't be afraid to use
capitalization or long names if it makes your code more clear. It all
gets compiled to binary anyway, so you don't do anyone (yourself
included) when variables are called "v1" and "v2" instead of
"objectMesh" and "objectTexture". It's also helpful to use multiple
classes and methods to keep each piece of your complex work, simple.
For example, if you have multiple states in your application, it may be
helpful to create a "showState" function. That function can then be the
authority to making sure everything falls into place. Instead of
putting this code in each button handler, make each button handler
point back to your central function. It's much easier to debug
applications when a specific behavior is always handled by the same
code.
- Actuate. Use a good tween library -- goes a long way to making your
life easier. Animating properties, or pushing numbers around, is an
extremely common task in AS3. Use a library that feels comfortable and
is reliable. My favorite is Actuate, but (by no means) is it the only
library out there. Performance, reliability, and (in my opinion) global
control with good overwrite support is essential. If your library
supports solid overwriting, it means that you can "set it and forget
it" ... even if you started an animation moments before, it will kill
the previous animations if they conflict with your most recent
instructions.
- Mailing lists, Google. Google is a great resource for AS3
questions, and mailing lists can be the best place for library-specific
questions.
On Sun, 26 Dec 2010 09:46:37 -0800, rctdeclan <[email protected]>
wrote:
> Hi guys,
> I'm 16 years old and live in the Netherlands.
> I'm now coding AS3 and MXML for almost a year. I love coding, and I
> love learning new things.
> I have a few questions for the pro's out there. I hope you can help me
> with getting a better understanding of programming RIA's, and Flash
> development in general.
> I would like to know how you guys started, and what your visions were
> and how you managed (or not managed) to make those visions reality.
> Subjects like:
> - Away3D projects: How do you start your projects, do you have tips?
> - As3: Cairngorm, MVC
> And for Rob and Richard:
> - where did you guys learn the theory needed to build a 3d engine? Are
> there some 3D-related tutorials you guys could recommend me?
> Many thanks in advance,
> Declan
--
Using Opera's revolutionary email client:http://www.opera.com/mail/
--
Using Opera's revolutionary email client: http://www.opera.com/mail/