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/

Reply via email to