Flappy Bird Clone

Flappy Bird Clone

Released 4 years ago , Last update 4 years ago

**ON SALE** Complete Flappy Bird Clone with customizable images, sounds, and animations. Make your own unique "Flappy Bird" style game today!

This complete Flappy Bird Clone utilizes customizable graphics, audio, and animation effects, written in SpriteKit, to allow you easy customization for every aspect of the game. By changing the graphics, audio, and tweaking the gameplay, you can create an entirely new "Flappy Bird" like game!

Featuring:

  • 1-1 Graphics
  • 1-1 Audio
  • 1-1 Animations
  • Advertisements
  • Game Center Support
  • Activity Sheet

Customizable options:

  • Animations
  • Gravity
  • Speed
  • Pipe Movement
  • Player Movement
  • And a whole lot more...

Disclaimer: Apple has announced that no more Flappy Bird clones would be accepted in the Appstore. We cannot take responsibility for apps submitted and rejected on the grounds of being a clone - it is up to you to differentiate with new gameplay and visual assets. Therefor, refund requests due to Appstore rejection on those grounds will not be honored.

We do provide post-purchase services if you are interested, and have many happy clients already. Use the "Get a quote" button in the sidebar to the right to get in touch.

4.7
  • 5 4
  • 4 2
  • 3 0
  • 2 0
  • 1 0
6 Reviews Read Reviews

Pricing

14 day 14-day money-back guarantee

$49.99

Application License

  • Perpetual license

  • 1 application

  • Can distribute binary products only

  • Commercial use

$299.99

Developer License

  • Perpetual license

  • Unlimited projects

  • Can distribute code and binary products

  • Commercial use

  • 6 months support

Need custom services for this product? Get a quote

Documentation

Customization Preferences:

/* Customizable Variables */

/* Application Wide */

// Should Application Show Ads - default is NO
static const BOOL kShouldShowAds                     = NO;

// Should Application Use Game Center - default is YES
static const BOOL kShouldUseGameCenter               = YES;

// Google Advertisements identifier - Change to your own ad identifier
#warning Input your Google Ads identifier
static NSString *kGoogleAdsIdentifier                = @"a1528a2eab19b1b";

// Revmob Advertisements identifier - Change to your own ad identifier

#warning Input your RevMob App ID if you have one
static NSString *kRevMobAppID                        = @"YourRevMobAppID";

// Revmob Fullscreen Ads Threshold - Number of gameplays before showing a full-screen revmob ad
static const int kRevMobFullScreenThreshold          = 4;

// LeaderBoard ID - Change to your own Game Center LeaderBoard ID
#warning Input your LeaderBoard ID
static NSString *kLeaderBoardID                      = @"YourLeaderBoardIDHere";

// App Store URL - Change to your own App Store URL
#warning Change the App Store URL
static NSString *kAppStoreURL                        = @"";

// Share sheet text - Change to your own custom UIActivityView Message
static NSString *kShareSheetMessage                  = @"OMG! I scored %d pts in #flapflap!!! -> %@";

// High Score Key Name
static NSString *kHighScoreKeyName                   = @"High Score";

// Score Label Font Name - Change when using a different font - default is 04b19
static NSString *kScoreLabelfontName                 = @"04b19";

// Set the status bar hidden - Change in the info.plist - default is hide status bar //

/* Animations */

// Bird's flapping speed - default is 0.13f
static const float kFlappingSpeed                    = 0.13f;

// Land movement speed - default is 2.0f
static const float kLandMovementSpeed                = 2.0f;
static const float kLandMovementSpeediPad            = 2.55f;

// Title moving up and down speed - default is 0.37f
static const float kTitleUpAndDownSpeed              = 0.37f;

// Title movement offset - default is 6 pixels
static const int kTitleUpAndDownMovementOffset       = 6;

// Button movement offset - default is 2 pixels
static const int kButtonMovementOffset               = 2;

// Title offset from the top of the screen - default is 0.39f
static const float kTitleOffsetPercentageFromTop     = 0.39f;

// Number of shakes
static const int kNumberShakes                       = 2;

// Number of screenshakes - per shake cycle - default is 4.0f
static const float kNumberScreenShakes               = 4.0f;

// Time it takes to shake screen - default is 0.07f
static const float kTimeShakingScreen                = 0.07f;

// Distance (in pixels) screen is shaken - default is 5
static const float kDistanceScreenShaken             = 5.0f;

// Object Bounciness - default is 0
static const CGFloat kObjectBounciness               = 0.0f;

/* Game */

// Gravity - default is -9
static const CGFloat kGravity                        = -9;
static const CGFloat kGravityiPad                    = -18;

// Player Density - default is 1.3
static const CGFloat kDensity                        = 1.3;
static const CGFloat kDensityiPad                    = 2.6;

// Maximum Velocity - default is 400
static const CGFloat kMaxVelocity                    = 400;
static const CGFloat kMaxVelocityiPad                = 750;

// Player Death Density - default is 0.4
static const CGFloat kDeathDensity                   = 0.4;
static const CGFloat kDeathDensityiPad               = 0.8;

// Player Death Maximum Velocity - default is 100
static const CGFloat kDeathMaxVelocity               = 100;
static const CGFloat kDeathMaxVelocityiPad           = 200;

// Pipe Speed - How fast the pipe moves across the screen in seconds - the lower the faster - default is 2.5f
static const CGFloat kPipeSpeed                      = 2.5f;
static const CGFloat kPipeSpeediPad                  = 3.0f;

// Pipe Width - default is 58 pixels
static const CGFloat kPipeWidth                      = 58.0;
static const CGFloat kPipeWidthiPad                  = 116.0;

// Pipe Height - default is 270 pixels
static const CGFloat kPipeHeight                     = 270;
static const CGFloat kPipeHeightiPad                 = 810;

// Pipe Gap - In between top and bottom - default is 108
static const CGFloat kPipeGap                        = 108;
static const CGFloat kPipeGapiPad                    = 360;

// Pipe Frequency - default is 1.25
static const CGFloat kPipeFrequency                  = 1.25;
static const CGFloat kPipeFrequencyiPad              = 1.5;

// Ground Height - default is 125 pixels
static const CGFloat kGroundHeight                   = 125.0;

// Ground Collision Offset - Where you want the collision to take place in reference to the ground frame - default is -8.0f
static const CGFloat kGroundCollisionOffset          = -8.0f;

// Pre-Game Wait - How long it takes before pipes show up - default is 1.5f
static const CGFloat kPreGameWait                    = 1.5f;

// Score Timing Distance Help - Additional help for how close the bird has to be to the pipe in order to score a point which can be positive or negative - default is 0.0f - ranges should be between -50 to 50 pixels
static const CGFloat kScoreTimingDistanceHelp        = 0.0f;

/* Bird Rotation */

// Rotation Speed - How fast the bird rotates - default is 0.08f
static const CGFloat kRotationSpeed                  = 0.08f;

// Velocity for rotation - How fast the bird needs to be going in order to determine which way to rotate it - default is -250.0f
static const CGFloat kVelocityForRotation            = -250.0f;

// Downward Angle of Rotation - What angle the bird will be positioned at when going down faster than the rotational velocity or at the end of the game - default is -1.56f
static const CGFloat kDownwardAngleOfRotation        = -1.56f;

// Upward Angle of Rotation - What angle the bird will be positioned at when going up faster than the rotational velocity or when tapping the screen - default is 0.4f
static const CGFloat kUpwardAngleOfRotation          = 0.4f;

// Default Angle of Rotation - What angle the bird will be positioned at by default before the game has started - only change this if you want the bird not to be horizontal at the start - default is 0.0f
static const CGFloat kDefaultAngleOfRotation         = 0.0f;

/* Specifics */

// Score Label Font Size - default is 22.0f
static const CGFloat kScoreLabelFontSize             = 24.0f;
static const CGFloat kScoreLabelFontSizeiPad         = 44.0f;

// Wait time until game over shows - default is 1.2f
static const float kWaitGameOver                     = 1.2f;

/* UI Elements Sizing and Positioning */

// Main Menu Title Label Size - default is 213/49
static const CGSize kMainMenuTitleLabelSize          = {213, 49};
static const CGSize kMainMenuTitleLabelSizeiPad      = {426, 98};

// Main Menu Title Label Position - default is -29/0
static const CGPoint kMainMenuTitleLabelPosition     = {-29, 0};
static const CGPoint kMainMenuTitleLabelPositioniPad = {-58, 0};

// Main Menu Title Bird Position - default is 116/3
static const CGPoint kMainMenuTitleBirdPosition      = {116, 3};
static const CGPoint kMainMenuTitleBirdPositioniPad  = {232, 6};

// Actual Bird Size - in case the size is changed later on - default is 54/54
static const CGSize kBirdSize                        = {54, 54};
static const CGSize kBirdSizeiPad                    = {81, 81};

// Bird collision size - in case you want to make the collision area bigger or smaller - default is 54/54
static const CGSize kBirdCollisionSize               = {34, 24};
static const CGSize kBirdCollisionSizeiPad           = {68, 48};

// Button Sizes - default is 90/30
static const CGSize kButtonSize                      = {90, 30};
static const CGSize kButtonSizeiPad                  = {180, 60};

// Main Menu Copyright Logo Size - default is 210/15
static const CGSize kMainMenuCopyrightSize           = {210, 15};
static const CGSize kMainMenuCopyrightSizeiPad       = {420, 30};

// Game View Tutorial Size - default is 165/121
static const CGSize kGameViewTutorialSize            = {165, 121};
static const CGSize kGameViewTutorialSizeiPad        = {247.5, 181.5};

// Game View Get Ready Label Size - default is 194/50
static const CGSize kGameViewGetReadyLabelSize       = {194, 50};
static const CGSize kGameViewGetReadyLabelSizeiPad   = {388, 100};

// Pause Button Size - default is 30/30
static const CGSize kPauseButtonSize                 = {30, 30};
static const CGSize kPauseButtonSizeiPad             = {60, 60};

// Score Panel Size - default is 250/130
static const CGSize kScorePanelSize                  = {250, 130};
static const CGSize kScorePanelSizeiPad              = {500, 260};

// Game Over Label Size - default is 208/42
static const CGSize kGameOverLabelSize               = {208, 42};
static const CGSize kGameOverLabelSizeiPad           = {416, 84};

// Score Label Position - default is 102/5
static const CGPoint kScoreLabelPosition             = {102, 5};
static const CGPoint kScoreLabelPositioniPad         = {204, 10};

// High Score Label Position - default is 102/-42
static const CGPoint kHighScoreLabelPosition         = {102, -42};
static const CGPoint kHighScoreLabelPositioniPad     = {204, -84};

// Badge Size - default is 37/18
static const CGSize kNewLabelSize                    = {37, 18};
static const CGSize kNewLabelSizeiPad                = {74, 36};

// Badge Position - default is 41/-8
static const CGPoint kNewLabelPosition               = {41, -8};
static const CGPoint kNewLabelPositioniPad           = {82, -16};

// Badge Size - default is 50/50
static const CGSize kBadgeSize                       = {50, 50};
static const CGSize kBadgeSizeiPad                   = {100, 100};

// Badge Position - default is -72/-7
static const CGPoint kBadgePosition                  = {-72, -7};
static const CGPoint kBadgePositioniPad              = {-144, -14};

// Sparkle Size - default is 5/5
static const CGSize kSparkleSize                     = {5, 5};
static const CGSize kSparkleSizeiPad                 = {10, 10};

/* Collision Information */

// Collision Detection Categories
static const uint32_t kPlayerCategory                = 0x1 << 0;
static const uint32_t kPipeCategory                  = 0x1 << 1;
static const uint32_t kLandCategory                  = 0x1 << 2;

/* Score Information */

// Bronze Level Winner Score - default is 10
static const int kBronzeScore                        = 10;

// Silver Level Winner Score - default is 20
static const int kSilverScore                        = 20;

// Gold Level Winner Score - default is 30
static const int kGoldScore                          = 30;

// Platinum Level Winner Score - default is 40
static const int kPlatinumScore                      = 40;

Support

Supports iOS 7 devices with 3.5"- 4" Screens

3 licenses, starting from From » $49.99 View Licenses

Get A Quote

What do you need?
  • Custom development
  • Integration
  • Customization / Reskinning
  • Consultation
When do you need it?
  • Soon
  • Next week
  • Next month
  • Anytime

Thanks for getting in touch!

Your quote details have been received and we'll get back to you soon.

or Get a quote

for customization or integration services


Or enter your name and Email
  • NW Nathan Walsh License holder Application License
    Purchased on Jun 7, 2016
    2 years ago
    The share button when clicked crashes on iPad 2 and also on the iPad 2 simulator in Xcode. Is there a fix so the share button works on iPads
    • Nick Kramer Publisher 2 years ago
      Hi Nathan, We'll look into it! So far, we haven't seen any issues of the sort with the share button. What version of Xcode and iOS are you running? Thanks, Nick
    • NW Nathan Walsh 2 years ago
      I'm using the latest xcode. The share button when clicked crashes on ipad 2 and ipad 2 simulator. works fine on all iphone versions. And there's this minor error appearing when i run the build related to ads. Sorry for using the comment section but i cant seem to find where to open a ticket. /LARSADS/TOLAdAdapteriAds.m:146:11: Comparison of address of 'ADBannerContentSizeIdentifierLandscape' not equal to a null pointer is always true
  • A Andris License holder Application License
    Purchased on Jun 12, 2015
    3 years ago
    Hi, Are you still supporting this game? Is there some possibility to make successful project for launching in app store?
    • Nick Kramer Publisher 3 years ago
      Hi Andris, Yes, we are still supporting this game! Feel free to reach out with a service request and we can discuss it. Thanks, Nick
  • DM Daniel Mendez License holder Application License
    Purchased on Mar 16, 2014
    4 years ago
    Nick, Sorry to be a bother - I'm sure you've been asked this already - but are AdMob and RevMob configured to be banners or interstitials? I ask because I input my RevMob ID and Google Ads Identifier and no ads are appearing in the simulator or when I test the app on my devices. Appreciate your help with this.
    • Nick Kramer Publisher 4 years ago
      Hey Daniel, AdMob is a banner ad, RevMob shows up as a fullscreen ad. What does the console say? Is the kShouldShowAds key set to YES? Thanks, Nick
    • DM Daniel Mendez 4 years ago
      kShouldShowAds is set to yes but when I set it, iAds come out in a banner (is this AdMob?). Also, the console says the following about RevMob: 2014-03-26 10:34:42.709 (myAppName)[50303:60b] [RevMob] Starting RevMobAds 2014-03-26 10:34:42.740 but I see no Ads. I tried it in the simulator though - not sure if its because its in the simulator. The console doesn't mention AdMob or GoogleAds
    • Nick Kramer Publisher 4 years ago
      You don't see any ads? Even test ads from iAd? They should be banner ads on the top/bottom of the screen and full-screen ads every odd number of plays.
    • DM Daniel Mendez 4 years ago
      Maybe I don't know what I'm looking at but I do see the test ads from iAd (will AdMob replace these ads once it goes live? do I have to edit any code to replace with AdMob?). Also, I don't see the full screen ads. I did change the threshold to '3' though - should i change it back to 5?
    • Nick Kramer Publisher 4 years ago
      You should see test ads from both iAd and AdMob when testing the app both on the simulator and the device. The app automatically picks the best ad service to give you the best ad fill rate so you make the most money. If you want to just use one or the other, feel free to comment it out in the app delegate .m. Full-Screen ads will show if you put in a RevMob publisher ID number and play the game the number of times the threshold is set to. Thanks!
    • DM Daniel Mendez 4 years ago
      Ahh I see, well I had also added another ad service from play haven and the ads from play haven show up. Could it be that it's interrupting the other ad services? Also, the test banner ads do appear on the device now, after i set it to 'yes'
    • Nick Kramer Publisher 4 years ago
      That's always a possibility. I've not used play haven so I'm not entirely sure.