Differences

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

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
extensions:be_parallax_sprite [2011/03/15 03:26] enbrextensions:be_parallax_sprite [2015/09/14 11:15] (current) – external edit 127.0.0.1
Line 1: Line 1:
 +~~NOTOC~~
  
 +====== BEParallaxSprite ======
 +
 +---- dataentry extension ----
 +type          : extension
 +author_mail   : briancensor@gmail.com Brian Ensor 
 +description   : A simple parallax background sprite.
 +lastupdate_dt : 2011-01-29
 +compatible    : v1.1
 +depends       : 
 +tags          : parallax, scrolling, background, layers
 +homepage_url  : https://github.com/brianensorapps/BEParallaxSprite
 +download_url  : https://github.com/brianensorapps/BEParallaxSprite/zipball/master
 +----
 +\\ [[/users/brian/start|My Wiki Page]]
 +\\
 +===== Usage =====
 +
 +{{http://img860.imageshack.us/img860/784/screenshot20110313at114.png|}}
 +
 +<code objc>
 +sky = [BEParallaxSprite parallexSpriteWithTexture:[SPTexture textureWithContentsOfFile:@"sky.png"] speed:0.5 direction:BE_PARALLAX_DIRECTION_LEFT];
 +[self addChild:sky];
 +</code>
 +
 +===== Changelog =====
 +
 +  * 2011/01/23: First public version
 +  * 2011/01/29: Added start and stop methods
 +===== Source Code =====
 +
 +BEParallaxSprite.h
 +<code objc>
 +#import <Foundation/Foundation.h>
 +
 +#define BE_PARALLAX_DIRECTION_LEFT 1
 +#define BE_PARALLAX_DIRECTION_RIGHT 2
 +#define BE_PARALLAX_DIRECTION_UP 3
 +#define BE_PARALLAX_DIRECTION_DOWN 4
 +
 +@interface BEParallaxSprite : SPSprite {
 + SPImage *mImage1;
 + SPImage *mImage2;
 + float mSpeed;
 + int mDirection;
 + float mCurStep;
 + bool mRunning;
 +}
 +
 +@property (nonatomic, assign) bool running;
 +@property (nonatomic, assign) float speed;
 +
 +- (void)onEnterFrame:(SPEnterFrameEvent *)event;
 +- (void)start;
 +- (void)stop;
 +- (id)initWithTexture:(SPTexture *)texture;
 +- (id)initWithTexture:(SPTexture *)texture speed:(float)speed;
 +- (id)initWithTexture:(SPTexture *)texture speed:(float)speed direction:(int)direction;
 ++ (BEParallaxSprite *)parallexSpriteWithTexture:(SPTexture *)texture;
 ++ (BEParallaxSprite *)parallexSpriteWithTexture:(SPTexture *)texture speed:(float)speed;
 ++ (BEParallaxSprite *)parallexSpriteWithTexture:(SPTexture *)texture speed:(float)speed direction:(int)direction;
 +
 +@end
 +</code>
 +BEParallaxSprite.m
 +<code objc>
 +#import "BEParallaxSprite.h"
 +
 +@implementation BEParallaxSprite
 +
 +@synthesize speed = mSpeed;
 +@synthesize running = mRunning;
 +
 +- (id)initWithTexture:(SPTexture *)texture {
 + if (self = [super init]) {
 + [self initWithTexture:texture speed:1 direction:BE_PARALLAX_DIRECTION_LEFT];
 + }
 + return self;
 +}
 +
 +- (id)initWithTexture:(SPTexture *)texture speed:(float)speed {
 + if (self = [super init]) {
 + [self initWithTexture:texture speed:speed direction:BE_PARALLAX_DIRECTION_LEFT];
 + }
 + return self;
 +}
 +
 +- (id)initWithTexture:(SPTexture *)texture speed:(float)speed direction:(int)direction {
 + if (self = [super init]) {
 + mRunning = YES;
 + mDirection = direction;
 + if (direction < 1 || direction > 4) {
 + mDirection = BE_PARALLAX_DIRECTION_LEFT;
 + }
 + mSpeed = speed;
 + mImage1 = [SPImage imageWithTexture:texture];
 + [self addChild:mImage1];
 + mImage2 = [SPImage imageWithTexture:texture];
 + if (mDirection == BE_PARALLAX_DIRECTION_DOWN) {
 + mImage2.y = mImage1.y-mImage2.height;
 + }
 + if (mDirection == BE_PARALLAX_DIRECTION_UP) {
 + mImage2.y = mImage1.y+mImage1.height;
 + }
 + if (mDirection == BE_PARALLAX_DIRECTION_RIGHT) {
 + mImage2.x = mImage1.x-mImage2.width;
 + }
 + if (mDirection == BE_PARALLAX_DIRECTION_LEFT) {
 + mImage2.x = mImage1.x+mImage1.width;
 + }
 + [self addChild:mImage2];
 + [self addEventListener:@selector(onEnterFrame:) atObject:self forType:SP_EVENT_TYPE_ENTER_FRAME];
 + }
 +    return self;
 +}
 +
 ++ (BEParallaxSprite *)parallexSpriteWithTexture:(SPTexture *)texture {
 + return [[[BEParallaxSprite alloc] initWithTexture:texture speed:1 direction:BE_PARALLAX_DIRECTION_LEFT] autorelease];
 +}
 +
 ++ (BEParallaxSprite *)parallexSpriteWithTexture:(SPTexture *)texture speed:(float)speed {
 + return [[[BEParallaxSprite alloc] initWithTexture:texture speed:speed direction:BE_PARALLAX_DIRECTION_LEFT] autorelease];
 +}
 +
 ++ (BEParallaxSprite *)parallexSpriteWithTexture:(SPTexture *)texture speed:(float)speed direction:(int)direction {
 + return [[[BEParallaxSprite alloc] initWithTexture:texture speed:speed direction:direction] autorelease];
 +}
 +
 +- (void)start {
 + if (mRunning != YES) {
 + mRunning = YES;
 + }
 +}
 +
 +- (void)stop {
 + if (mRunning != NO) {
 + mRunning = NO;
 + }
 +}
 +
 +- (void)onEnterFrame:(SPEnterFrameEvent *)event {
 + if (mRunning == YES) {
 + mCurStep += mSpeed;
 + if (mCurStep < 1) return;
 + if (mDirection == BE_PARALLAX_DIRECTION_DOWN) {
 + mImage1.y += floor(mCurStep);
 + mImage2.y += floor(mCurStep);
 + if (mImage1.y >= mImage1.height) {
 + mImage1.y = mImage2.y-mImage2.height;
 + }
 + if (mImage2.y >= mImage2.height) {
 + mImage2.y = mImage1.y-mImage1.height;
 + }
 + }
 + if (mDirection == BE_PARALLAX_DIRECTION_UP) {
 + mImage1.y -= floor(mCurStep);
 + mImage2.y -= floor(mCurStep);
 + if (mImage1.y <= -mImage1.height) {
 + mImage1.y = mImage2.y+mImage2.height;
 + }
 + if (mImage2.y <= -mImage2.height) {
 + mImage2.y = mImage1.y+mImage1.height;
 + }
 + }
 + if (mDirection == BE_PARALLAX_DIRECTION_RIGHT) {
 + mImage1.x += floor(mCurStep);
 + mImage2.x += floor(mCurStep);
 + if (mImage1.x >= mImage1.width) {
 + mImage1.x = mImage2.x-mImage2.width;
 + }
 + if (mImage2.x >= mImage2.width) {
 + mImage2.x = mImage1.x-mImage1.width;
 + }
 + }
 + if (mDirection == BE_PARALLAX_DIRECTION_LEFT) {
 + mImage1.x -= floor(mCurStep);
 + mImage2.x -= floor(mCurStep);
 + if (mImage1.x <= -mImage1.width) {
 + mImage1.x = mImage2.x+mImage2.width;
 + }
 + if (mImage2.x <= -mImage2.width) {
 + mImage2.x = mImage1.x+mImage1.width;
 + }
 + }
 + mCurStep -= floor(mCurStep);
 + }
 +}
 +
 +- (void)dealloc {
 + [super dealloc];
 +}
 +
 +@end
 +</code>
 +
 +If using Xcode 4 and the latest sparrow release, remember to include "libz.dylib" in your project.
 +It took me a lot of time to track down it was missing, causing linker errors.
  extensions/be_parallax_sprite.txt · Last modified: 2015/09/14 11:15 by 127.0.0.1
 
Powered by DokuWiki