Posts in Training
OSCON 2014

We just finished another fantastic week at OSCON 2014 – this was our fourth year attending and speaking at O'Reilly's Open Source Convention, and we (as usual) had an absolutely amazing time. It's rapidly becoming one of our favourite conferences.

We presented twice at OSCON this year: a session version of our How Do I Game Design? workshop, and our three-hour Android-focused mobile design tutorial (along with Chris Neugebauer, as usual).

The slides for How Do I Game Design? are available now on Speaker Deck. Interesting and related links for attendees are:

The games we mentioned in the talk are:

The slides for our mobile design tutorial Unfortunately Design Tutorial Has Stopped ... and other ways to infuriate people with mobile apps are available now on Speaker Deck. Interesting and related links for attendees are:

Please don't hesitate to get in touch if you have any questions!

Books, and training, and conferences! Oh my!

First, books!

We're very pleased to announce that our latest two books are now available! The first, Learning Cocoa with Objective-C Fourth Editionis an update to our previous third edition book, this time co-written with our frequent collaborator and co-conspirator Tim Nugent. It covers everything existing programmers need to skill up with the latest in iPhone, iPad, and Mac development technologies. 

The second new book is the iOS Game Development Cookbook; it provides a huge range of recipes for common things you need to when building a game for iOS (or any other platform, if you're willing to translate the examples out of Cocoa and Objective-C, or even for things that aren't games if you're creative!)

We're really proud of both of these books, and hope you find them useful and enjoyable! Let us know what you think, or if you have any questions. You can find more details, and links to sample code, on our books page.

Second, training!

If you like our books, then why not try our training? Check out our previous blog post to learn more about our upcoming Melbourne iOS developer training.

Finally, conferences!

We're very pleased to be speaking at the (very awesome) O'Reilly Open Source Convention (OSCON) again this year – for the fourth time in a row! We'll be presenting our mobile app design workshop “Unfortunately, Design Tutorial Has Stopped”, and Other Ways to Infuriate People With Mobile Apps with frequent collaborator Chris Neugebauer, as well as the session How Do I Game Design?, exploring the basics of game design

Additionally, Tim Nugent (our co-author on the latest Learning Cocoa book) will be presenting the session My Friends Keep Leaving and it is Ruining Board Games Day, which explores the state of augmented and remote board gaming; Chris Neugebauer is also presenting the session Portable Logic/Native UI exploring best practices for building mobile apps that need to run on multiple platforms. It's all sure to be excellent! Do try it.

 

iOS Developer Lab, Melbourne

Just a quick post to announce a Melbourne iOS Developer Lab will be running June 20-22. Our iOS Developer Labs are super popular, and usually fill up fast – we take 3 days of your week and bring you up to speed with iOS 7+ development!

Past participants have enjoyed their time learning how to build iPhone and iPad apps with us:

Secret Lab’s iOS Developer Lab stoked the fire to get back into iOS development for me - I was surprised by some of the things I learned along the way. Often the tangents were some of the best stuff, but the core material was a great curriculum!
— Past participant, Melbourne, December 2012
I think this was the best training course I’ve ever done. Secret Lab blew me away with their approachability and willingness to explain and answer my silly questions! Highly recommended.
— Past participant, Brisbane, February 2014

For the next few days you can sign up at the half price rate of $750 AUD + GST. Please email us if you have any questions, or if you'd like a discount for group signups (3+). We're also happy to hear from you if you're currently unemployed or a student and would like to chat about special prices. You can learn more about us, and check out our work and books on this website.

iOS Developer Training in Hobart
DoctorScience-Framed.png

We're really excited to announce an intensive 2-day iOS developer workshop in our hometown, Hobart. The workshop is organised in conjunction with ACS Tasmania.

You can learn all about it on our training page, or over at the ACS website. There is a discount for ACS members.

The workshop is designed for existing programmers (of any sort) who want to learn iOS development, or iOS programmers who want to get up to speed with the latest techniques for building iPhone and iPad apps. It teaches the very latest public iOS developer tools and features.

Brisbane and Melbourne iOS developer training is also currently open for registration.

Animation Basics: Part 2
spiralfacemaybeheader.png

This is the second in a series of posts about animation by Rex Smeal, animator, and friend to cephalopod and amphibia alike.

Welcome back! If you haven’t read the first part of our animation basics trilogy, you should check it out! This second article is about Timing!

Timing

So, if Spacing determines how quickly or slowly something moves, what is there left to call timing? A lot of the time (ha ha), timing is the functional time requirement of your subject. For example, when animating a boxer throwing a punch, you must make the timing quick enough to accurately convey the speed of the punch: too fast and we miss it, too slow and he looks silly. Another example would be interfaces, which need to move quickly into place in order to be practical.

This is something most people know how to do instinctively, or can easily adjust for when a mistake is obviously too slow or too fast. Where timing gets interesting is the way choices in timing can affect multiple elements moving together.

As mentioned in the Spacing article, where Spacing is the placement of instances through time, Timing is the distribution of time across defined instance points, or keyframes.

Techniques

Real World Imitation

All good animators spend a great deal of time looking at real-world reference footage. Animal motion, the motion of objects under gravity: stones, balls, feathers, objects halted by a rope. Using natural timing at least as a starting point will cause objects to appear much more real. The closer the timing of an imaginary object mirrors a counterpart in reality, the more readily a viewer will accept it, irrelevant of how ridiculous the subject itself is. For example, an animated desk lamp that moves with the timing of a real, living creature can be more easily believed by an audience than a hyper-realistic figure which moves sluggishly or haltingly.

Where spacing demonstrates path of motion and slows and starts at a micro level, the wider choices about where objects move at what times is determined at a macro Timing level. These two concepts do blur quite a lot at their borders; I think of timing as requirements and spacing as the flair of a motion.

Timing Contrast

If one were listening to a drum which kept steady 4:4 time it would become very boring very fast. But with a second instrument playing a melody, or a second drum playing a different beat, interesting new combinations arise and we’re enjoying contrasts in timing. In terms of animation, this means that monotonous or homogenous motion across multiple objects is going to look bland, and a dynamic and heterogeneous cascade of objects moving at different speeds and in different styles, whilst requiring a little more effort on the part of the animator, will look much more interesting!

This isn’t always desirable, as often an audience is required to concentrate on something that isn’t moving, and in those situations a panoply of motion cues isn’t going to be advantageous.

Secondary Animation

Imagine a car driving around a corner (and our spacing is evenly distributed around the corner as we’re recklessly not slowing down), I guess you could say that this would be our Primary animation (an object appearing to move on it’s own initiative/by it’s own power). If the car has a trailer though we might call the motion of the trailer Secondary animation (an object’s motion that is separate from, but mostly determined by a primary object).

The other forces acting on the trailer might be gravity, it’s own momentum, the elasticity of the tether to the car, and if it were a lighter object, such as a flag, wind might be another factor. A flag on a stick, long hair on someone’s head, the tail of a kite, an injured arm hanging loosely from someone’s shoulder, even your clothes on your body are all examples of a secondary action linked to, caused by, but not identical to, a strong primary motion force.

This linked or tethered motion often provides a nice timing contrast, and good use of secondary animation both accentuates and deepens a motion and makes it much more interesting and attractive to a viewer. In fact, the emergent action of an object under forces is often more interesting than the primary motion. In touchscreen interface motion, the primary motion could be considered to be the gestures of the user and the interfaces move as secondary action.

Staggering

Some people like to call this overlap, and the definitions get very messy when you’re talking about it in terms of secondary animation or two parts of one object, but what it really means is two parts of the same object moving in a similar (or even identical) way at different times. This helps to separate the objects, and adds a lot of interest to the motion. Inversely, regular timing can unite otherwise separate objects.

These two groups are composed of identical frame instances, just presented out of synch by one and two frames for the staggering effect.

staggeringregular.gif

Cycles

Cycles are a really interesting technique, particularly as an economy measure. An animation cycle is where a sequence or motion may be looped and reused more than once. The difference between a ‘Cycle’ and a ‘Loop’ is that a cycle may only apply to one component, whereas a loop generally applies to everything that is displayed.

One of the most well-known uses for this technique is the “run cycle” where a character’s two steps loop seamlessly to create the illusion of an ongoing running action, when in reality the animator has obviously only been required to animate two steps.

The main difficulty in making viable cycles is preventing your audience from really seeing too much of the “seam” where the cycle repeats. In many cases there won’t be a seam: a spinning object, for example, could be said to loop from any point in it’s rotation. But more complex motions, like a character jumping, or running, often lend themselves to a logical starting point.

Keeping away from dead stops and overly regular spacing will help, obviously repeating frames will sit as a kind of afterimage in the viewer’s mind as the animation cycles. Where cycle economy becomes really powerful (infinite, really) is when there are several cycles working together, all with different lengths. Take this simple example.

Okay now brace yourself for some maths: Two cycles (with different timing) are playing in the next example, and the total length of the animation is double the longest of the two cycles. Despite doubling the on-screen time of the animation, technically we’ve only really stolen twelve frames for free here (24+36=60). But this is with two relatively compatible cycles.

If I had added another really short cycle with an uneven number of just five frames, the animation as a whole would not have truly looped until unique frame number 360, stealing us 295 frames for free and making the largest and most terrible gif ever to be displayed on the Internet.

This is great for long animations of spinning logos, but also useful for things like water ripples, cloud motion, shifting colours across an object. Extending cycle lifetime is the strongest way to avoid obvious repetition, and joining cycles like this is the cheapest way to extend overall cycle lifetime.

With the use of procedural animation, we can control these cycles just as we control loops in code: randomised frame segment orders, dynamic particle generators, and so on. Using these techniques, we can extend these cycle times dramatically, or infinitely, for no extra ‘drawings’ and close to zero extra effort. Eased rests, cycles and code-assisted animation are where an intelligent animator will be able to save the most time/money.

We hope you’ve enjoyed part two! Chat to us on Twitter and Facebook, or email us or if you have any questions!

Join us next time for the final episode in this animation basics series: Spatial Distortion!

Art, Stuff, TrainingSecret Lab