Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
tutorials:drawing_trails [2011/03/29 18:07]
88.117.124.0
tutorials:drawing_trails [2013/03/05 10:19] (current)
Line 1: Line 1:
 +====== Drawing Trails ======
 +
 +
 +You can use Sparrow'​s SPrenderTexture to draw trails and create interesting effects. ​ to do this we stamp an object repeatedly onto a render texture then stamp a colored quad on top to fade it out.  ​
 +
 +Try it with particles for some serious fun.
 +
 +<code objc>
 +#import <​Foundation/​Foundation.h>​
 +#import "​Sparrow.h"​
 +
 +@interface SparrowTrails : SPStage{
 + CGPoint lastTouch;
 + CGPoint newTouch;
 + SPImage *follower;
 + SPQuad *fadeColor;
 + SPRenderTexture *fadeTexture;​
 + SPImage *fadeImage;
 +}
 +
 +- (void)update:​(SPEnterFrameEvent*)event;​
 +- (void)touched:​(SPTouchEvent*)event;​
 +
 +@end
 +</​code>​
 +
 +<code objc>
 +#import "​SparrowTrails.h" ​
 +
 +@implementation SparrowTrails
 +
 +- (id)initWithWidth:​(float)width height:​(float)height {
 +    self = [super initWithWidth:​width height:​height];​
 +
 + // create the render texture to draw on
 + fadeTexture = [[SPRenderTexture alloc] initWithWidth:​320 height:​480];​
 + [fadeTexture clearWithColor:​0x000000 alpha:1];
 + fadeImage = [SPImage imageWithTexture:​fadeTexture];​
 + [self addChild:​fadeImage];​
 +
 + // create the object we are going to draw on the texture
 + follower = [SPImage imageWithContentsOfFile:​@"​follower.png"​];​
 + [self addChild:​follower];​
 +
 + // create something to log our touches
 + lastTouch = CGPointMake(0,​ 0);
 + newTouch = CGPointMake(0,​ 0);
 +
 + // this is the fade color we will use to fade out the trail
 + fadeColor = [[SPQuad alloc] initWithWidth:​320 height:​480];​
 + fadeColor.color = 0x000000;
 + fadeColor.alpha = .1;
 +
 + // add event listeners
 + [self addEventListener:​@selector(update:​) atObject:​self forType:​SP_EVENT_TYPE_ENTER_FRAME];​
 + [self addEventListener:​@selector(touched:​) atObject:​self forType:​SP_EVENT_TYPE_TOUCH];​
 +
 +    return self;
 +}
 +
 +- (void)update:​(SPEnterFrameEvent*)event{
 + // check to see if we have a new touch and draw the follower
 + if(newTouch.x != lastTouch.x || newTouch.y != lastTouch.y){
 + follower.x = newTouch.x - (follower.width/​2);​
 + follower.y = newTouch.y - (follower.height/​2);​
 + [fadeTexture drawObject:​follower];​
 + lastTouch = CGPointMake(newTouch.x,​ newTouch.y);​
 + }
 + // fade out the follower
 + [fadeTexture drawObject:​fadeColor];​
 +}
 +
 +- (void)touched:​(SPTouchEvent*)event{
 + // let's log our touches for the next enterframe event
 + SPTouch *touchMove = [[event touchesWithTarget:​self andPhase:​SPTouchPhaseMoved] anyObject];
 + if(touchMove){
 + SPPoint *touchPos = [touchMove locationInSpace:​self];​
 + newTouch = CGPointMake(touchPos.x,​ touchPos.y);​
 + }
 +}
 +
 +- (void)dealloc{
 + // cleanup
 + [self removeEventListener:​@selector(update:​) atObject:​self forType:​SP_EVENT_TYPE_ENTER_FRAME];​
 + [self removeEventListener:​@selector(touched:​) atObject:​self forType:​SP_EVENT_TYPE_TOUCH];​
 + [fadeTexture release];
 + [self removeChild:​fadeImage];​
 + [self removeChild:​follower];​
 + [self removeChild:​fadeColor];​
 + [fadeColor dealloc];
 + [super dealloc];
 +}
 +
 +@end
 +</​code>​
  
 
 
Powered by DokuWiki