SlideShare a Scribd company logo
1 of 88
Download to read offline
Making Things Move
           on the iPhone
                             Keith Peters
                           www.bit-101.com




Wednesday, March 4, 2009
www.bit-101.com/
                               360iDev/
                            presentation.zip


Wednesday, March 4, 2009
CoreAnimation



Wednesday, March 4, 2009
Background



Wednesday, March 4, 2009
Background
                           2005




Wednesday, March 4, 2009
Background
                           2005
                                     2007



Wednesday, March 4, 2009
Background
                           2005
                                     2007
                                               2008

Wednesday, March 4, 2009
Wednesday, March 4, 2009
Wednesday, March 4, 2009
Wednesday, March 4, 2009
What is Animation?



Wednesday, March 4, 2009
Wednesday, March 4, 2009
Wednesday, March 4, 2009
Coded Animation




Wednesday, March 4, 2009
Coded Animation
                                Apply a
                                 rule




Wednesday, March 4, 2009
Coded Animation
                                Apply a
                                 rule




                                           Change
                                          something


Wednesday, March 4, 2009
Coded Animation
                                Apply a
                                 rule




                    Update                 Change
                  the screen              something


Wednesday, March 4, 2009
Coded Animation
                                Apply a
                                 rule




                    Update                 Change
                  the screen              something


Wednesday, March 4, 2009
Make something
                          to move


Wednesday, March 4, 2009
Make something
                          to move


Wednesday, March 4, 2009
Make something
                          to move

                           (project files: Animation101)


Wednesday, March 4, 2009
// interface
  UIImageView *ball;




  // viewDidLoad
  ball = [[UIImageView alloc] initWithImage:
            [UIImage imageNamed:@quot;ball.pngquot;]];
  [self.view addSubview:ball];




Wednesday, March 4, 2009
NSTimer




Wednesday, March 4, 2009
NSTimer
  [NSTimer
     scheduledTimerWithTimeInterval:1.0/60.0
     target:self
     selector:@selector(onTimer)
     userInfo:nil
     repeats:YES];




Wednesday, March 4, 2009
Moving UIViews




Wednesday, March 4, 2009
Moving UIViews

                   • view.center




Wednesday, March 4, 2009
Moving UIViews

                   • view.center
                   • view.transform



Wednesday, March 4, 2009
Moving UIViews

                   • view.center
                   • view.transform
                   • view.frame


Wednesday, March 4, 2009
// interface
     float x;
     float y;



                           // viewDidLoad
                           x = 50.0;
                           y = 50.0;




Wednesday, March 4, 2009
ball.center = CGPointMake(x, y);
  x += 2.0;
  y += 3.0;




Wednesday, March 4, 2009
ball.frame = CGRectMake(x, y, width, height);
  x += 2.0;
  y += 3.0;




Wednesday, March 4, 2009
ball.transform =
      CGAffineTransformMakeTranslation(x, y);
  x += 2.0;
  y += 3.0;




Wednesday, March 4, 2009
ball.transform =
      CGAffineTransformTranslate(
          ball.transform, 2.0, 3.0);




Wednesday, March 4, 2009
Which is fastest?




Wednesday, March 4, 2009
Which is fastest?

                   • view.center




Wednesday, March 4, 2009
Which is fastest?

                   • view.center
                   • view.transform (~2-3x)



Wednesday, March 4, 2009
Which is fastest?

                   • view.center
                   • view.transform (~2-3x)
                   • view.frame (~2-3x)


Wednesday, March 4, 2009
Velocity




                           (project files:Velocity)

Wednesday, March 4, 2009
Velocity


                               +
                           (project files:Velocity)

Wednesday, March 4, 2009
speed
                              and
                           direction




Wednesday, March 4, 2009
speed
                              and
                           direction
                                            y velocity




                               x velocity


Wednesday, March 4, 2009
- y velocity



                           - x velocity          + x velocity




                                          + y velocity


Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface:
  float vx;
  float vy;




Wednesday, March 4, 2009
// interface:
  float vx;
  float vy;


                    // viewDidLoad:
                    vx = 2.0;
                    vy = 3.0;




Wednesday, March 4, 2009
// interface:
  float vx;
  float vy;


                    // viewDidLoad:
                    vx = 2.0;
                    vy = 3.0;

                           // onTimer:
                           ball.center = CGPointMake(x, y);
                           x += vx;
                           y += vy;


Wednesday, March 4, 2009
speed




                             angle


                           (project files: AngularVelocity)

Wednesday, March 4, 2009
y velocity
                                     speed                    =
                                                          sin(angle)
                                                               x
                                                            speed
                                 angle
                           x velocity = cos(angle) x speed
                              (project files: AngularVelocity)

Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface:
  float angle;
  float speed;




Wednesday, March 4, 2009
// interface:            // viewDidLoad:
  float angle;             angle = 45.0;
  float speed;             speed = 4.0;




Wednesday, March 4, 2009
// interface:            // viewDidLoad:
  float angle;             angle = 45.0;
  float speed;             speed = 4.0;




  // onTimer:
  ball.center = CGPointMake(x, y);
  x += cos(angle * M_PI / 180.0) * speed;
  y += sin(angle * M_PI / 180.0) * speed;




Wednesday, March 4, 2009
Acceleration




                           (project files: Acceleration)

Wednesday, March 4, 2009
Acceleration


                                 +
                           (project files: Acceleration)

Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface:
  float ax;
  float ay;




Wednesday, March 4, 2009
// interface:            // viewDidLoad:
  float ax;                ax = 0.07;
  float ay;                ay = 0.1;




Wednesday, March 4, 2009
// interface:                             // viewDidLoad:
  float ax;                                 ax = 0.07;
  float ay;                                 ay = 0.1;



                           // onTimer:
                           ball.center = CGPointMake(x, y);
                           x += vx;
                           y += vy;
                           vx += ax;
                           vy += ay;


Wednesday, March 4, 2009
Bouncing




                           (project files: Bouncing)

Wednesday, March 4, 2009
Wednesday, March 4, 2009
-x velocity y velocity




                                         y velocity
                            x velocity


Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface:
              float bounce;




Wednesday, March 4, 2009
// interface:
              float bounce;




                              // viewDidLoad:
                              bounce = -1.0;




Wednesday, March 4, 2009
ball.center = CGPointMake(x, y);
  x += vx;
  y += vy;
  if(x > 300)	 	 	  // 320 - radius (20)
  {
  	 x = 300;
  	 vx *= bounce;
  }
  else if(x < 20)		 // 0 + radius
  {
  	 x = 20;
  	 vx *= bounce;
  }


Wednesday, March 4, 2009
if(y > 440)	 	 // 460 - radius
              	
  {
  	 y = 440;
  	 vy *= bounce;
  }
  else if(y < 20)	 	 // 0 + radius
  {
  	 y = 20;
  	 vy *= bounce;
  }



Wednesday, March 4, 2009
Gravity



                               acceleration
                                   (+y)



Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface:
     float gravity;




Wednesday, March 4, 2009
// interface:
     float gravity;



                           // viewDidLoad:
                           gravity = 0.5;




Wednesday, March 4, 2009
// interface:
     float gravity;



                           // viewDidLoad:
                           gravity = 0.5;



                                             // onTimer:
                                             vy += gravity;



Wednesday, March 4, 2009
Wednesday, March 4, 2009
acceleration.y



                           acceleration.x



Wednesday, March 4, 2009
@interface GravityViewController :
  UIViewController <UIAccelerometerDelegate>
  {
  	 UIImageView *ball;
  	 float x;
  	 float y;
  	 float vx;
  	 float vy;
  	 float bounce;
  	 CGPoint gravity;
  }



Wednesday, March 4, 2009
Wednesday, March 4, 2009
// viewDidLoad
  gravity = CGPointZero;
  [[UIAccelerometer sharedAccelerometer]
      setDelegate:self];




Wednesday, March 4, 2009
// viewDidLoad
  gravity = CGPointZero;
  [[UIAccelerometer sharedAccelerometer]
      setDelegate:self];

  - (void)accelerometer:(UIAccelerometer *)accelerometer
          didAccelerate:(UIAcceleration *)acceleration
  {
  	 gravity = CGPointMake(acceleration.x,
                         -acceleration.y);
  }




Wednesday, March 4, 2009
// viewDidLoad
  gravity = CGPointZero;
  [[UIAccelerometer sharedAccelerometer]
      setDelegate:self];

  - (void)accelerometer:(UIAccelerometer *)accelerometer
          didAccelerate:(UIAcceleration *)acceleration
  {
  	 gravity = CGPointMake(acceleration.x,
                         -acceleration.y);
  }

  // onTimer
  vx += gravity.x;
  vy += gravity.y;


Wednesday, March 4, 2009
Do we still have time?



Wednesday, March 4, 2009
Dragging and Throwing



Wednesday, March 4, 2009
Wednesday, March 4, 2009
// interface
    BOOL dragging;




Wednesday, March 4, 2009
// interface           // viewDidLoad
    BOOL dragging;         dragging = NO;




Wednesday, March 4, 2009
// interface                         // viewDidLoad
    BOOL dragging;                       dragging = NO;



                           - (void)onTimer
                           {
                              if(!dragging)
                              {
                                 ...
                              }
                           }


Wednesday, March 4, 2009
- (void)touchesBegan:(NSSet *)touches
          withEvent:(UIEvent *)event
  {
  	 UITouch *touch = [touches anyObject];
  	 CGPoint point = [touch locationInView:self.view];
  	 float dx = point.x - x;
  	 float dy = point.y - y;
  	 float dist = sqrt(dx * dx + dy * dy);
  	 if(dist < 20)
  	{
  		    dragging = YES;
  		    x = point.x;
  		    y = point.y;
  		    vx = 0;
  		    vy = 0;
  	}
  }



Wednesday, March 4, 2009
- (void)touchesEnded:(NSSet *)touches
          withEvent:(UIEvent *)event
  {
  	 dragging = NO;
  }




Wednesday, March 4, 2009
- (void)touchesMoved:(NSSet *)touches
          withEvent:(UIEvent *)event
  {
  	 if(dragging)
  	{
  		    UITouch *touch = [touches anyObject];
  		    CGPoint point = [touch locationInView:self.view];
  		    vx = point.x - x;
  		    vy = point.y - y;
  		    x = point.x;
  		    y = point.y;
  		    ball.center = point;
  	}
  }	




Wednesday, March 4, 2009
Thank you
                   • Keith Peters
                   • kp@bit-101.com
                   • www.bit-101.com
                   • www.wickedpissahgames.com
                   • www.bit-101.com/360iDev/presentation.zip

Wednesday, March 4, 2009

More Related Content

More from John Wilker

More from John Wilker (20)

Introtoduction to cocos2d
Introtoduction to  cocos2dIntrotoduction to  cocos2d
Introtoduction to cocos2d
 
Getting Started with OpenGL ES
Getting Started with OpenGL ESGetting Started with OpenGL ES
Getting Started with OpenGL ES
 
User Input in a multi-touch, accelerometer, location aware world.
User Input in a multi-touch, accelerometer, location aware world.User Input in a multi-touch, accelerometer, location aware world.
User Input in a multi-touch, accelerometer, location aware world.
 
Physics Solutions for Innovative Game Design
Physics Solutions for Innovative Game DesignPhysics Solutions for Innovative Game Design
Physics Solutions for Innovative Game Design
 
Getting Oriented with MapKit: Everything you need to get started with the new...
Getting Oriented with MapKit: Everything you need to get started with the new...Getting Oriented with MapKit: Everything you need to get started with the new...
Getting Oriented with MapKit: Everything you need to get started with the new...
 
Getting Started with iPhone Game Development
Getting Started with iPhone Game DevelopmentGetting Started with iPhone Game Development
Getting Started with iPhone Game Development
 
Internationalizing Your Apps
Internationalizing Your AppsInternationalizing Your Apps
Internationalizing Your Apps
 
Optimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application ResponsivenessOptimizing Data Caching for iPhone Application Responsiveness
Optimizing Data Caching for iPhone Application Responsiveness
 
I Phone On Rails
I Phone On RailsI Phone On Rails
I Phone On Rails
 
Integrating Push Notifications in your iPhone application with iLime
Integrating Push Notifications in your iPhone application with iLimeIntegrating Push Notifications in your iPhone application with iLime
Integrating Push Notifications in your iPhone application with iLime
 
Starting Core Animation
Starting Core AnimationStarting Core Animation
Starting Core Animation
 
P2P Multiplayer Gaming
P2P Multiplayer GamingP2P Multiplayer Gaming
P2P Multiplayer Gaming
 
Using Concurrency To Improve Responsiveness
Using Concurrency To Improve ResponsivenessUsing Concurrency To Improve Responsiveness
Using Concurrency To Improve Responsiveness
 
Leaving Interface Builder Behind
Leaving Interface Builder BehindLeaving Interface Builder Behind
Leaving Interface Builder Behind
 
Mobile WebKit Development and jQTouch
Mobile WebKit Development and jQTouchMobile WebKit Development and jQTouch
Mobile WebKit Development and jQTouch
 
Accelerometer and OpenGL
Accelerometer and OpenGLAccelerometer and OpenGL
Accelerometer and OpenGL
 
Deep Geek Diving into the iPhone OS and Framework
Deep Geek Diving into the iPhone OS and FrameworkDeep Geek Diving into the iPhone OS and Framework
Deep Geek Diving into the iPhone OS and Framework
 
NSNotificationCenter vs. AppDelegate
NSNotificationCenter vs. AppDelegateNSNotificationCenter vs. AppDelegate
NSNotificationCenter vs. AppDelegate
 
Using SQLite
Using SQLiteUsing SQLite
Using SQLite
 
From Flash to iPhone
From Flash to iPhoneFrom Flash to iPhone
From Flash to iPhone
 

Recently uploaded

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Victor Rentea
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 

Recently uploaded (20)

Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Six Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal OntologySix Myths about Ontologies: The Basics of Formal Ontology
Six Myths about Ontologies: The Basics of Formal Ontology
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 

Making things Move on the iPhone

  • 1. Making Things Move on the iPhone Keith Peters www.bit-101.com Wednesday, March 4, 2009
  • 2. www.bit-101.com/ 360iDev/ presentation.zip Wednesday, March 4, 2009
  • 5. Background 2005 Wednesday, March 4, 2009
  • 6. Background 2005 2007 Wednesday, March 4, 2009
  • 7. Background 2005 2007 2008 Wednesday, March 4, 2009
  • 15. Coded Animation Apply a rule Wednesday, March 4, 2009
  • 16. Coded Animation Apply a rule Change something Wednesday, March 4, 2009
  • 17. Coded Animation Apply a rule Update Change the screen something Wednesday, March 4, 2009
  • 18. Coded Animation Apply a rule Update Change the screen something Wednesday, March 4, 2009
  • 19. Make something to move Wednesday, March 4, 2009
  • 20. Make something to move Wednesday, March 4, 2009
  • 21. Make something to move (project files: Animation101) Wednesday, March 4, 2009
  • 22. // interface UIImageView *ball; // viewDidLoad ball = [[UIImageView alloc] initWithImage: [UIImage imageNamed:@quot;ball.pngquot;]]; [self.view addSubview:ball]; Wednesday, March 4, 2009
  • 24. NSTimer [NSTimer scheduledTimerWithTimeInterval:1.0/60.0 target:self selector:@selector(onTimer) userInfo:nil repeats:YES]; Wednesday, March 4, 2009
  • 26. Moving UIViews • view.center Wednesday, March 4, 2009
  • 27. Moving UIViews • view.center • view.transform Wednesday, March 4, 2009
  • 28. Moving UIViews • view.center • view.transform • view.frame Wednesday, March 4, 2009
  • 29. // interface float x; float y; // viewDidLoad x = 50.0; y = 50.0; Wednesday, March 4, 2009
  • 30. ball.center = CGPointMake(x, y); x += 2.0; y += 3.0; Wednesday, March 4, 2009
  • 31. ball.frame = CGRectMake(x, y, width, height); x += 2.0; y += 3.0; Wednesday, March 4, 2009
  • 32. ball.transform = CGAffineTransformMakeTranslation(x, y); x += 2.0; y += 3.0; Wednesday, March 4, 2009
  • 33. ball.transform = CGAffineTransformTranslate( ball.transform, 2.0, 3.0); Wednesday, March 4, 2009
  • 35. Which is fastest? • view.center Wednesday, March 4, 2009
  • 36. Which is fastest? • view.center • view.transform (~2-3x) Wednesday, March 4, 2009
  • 37. Which is fastest? • view.center • view.transform (~2-3x) • view.frame (~2-3x) Wednesday, March 4, 2009
  • 38. Velocity (project files:Velocity) Wednesday, March 4, 2009
  • 39. Velocity + (project files:Velocity) Wednesday, March 4, 2009
  • 40. speed and direction Wednesday, March 4, 2009
  • 41. speed and direction y velocity x velocity Wednesday, March 4, 2009
  • 42. - y velocity - x velocity + x velocity + y velocity Wednesday, March 4, 2009
  • 44. // interface: float vx; float vy; Wednesday, March 4, 2009
  • 45. // interface: float vx; float vy; // viewDidLoad: vx = 2.0; vy = 3.0; Wednesday, March 4, 2009
  • 46. // interface: float vx; float vy; // viewDidLoad: vx = 2.0; vy = 3.0; // onTimer: ball.center = CGPointMake(x, y); x += vx; y += vy; Wednesday, March 4, 2009
  • 47. speed angle (project files: AngularVelocity) Wednesday, March 4, 2009
  • 48. y velocity speed = sin(angle) x speed angle x velocity = cos(angle) x speed (project files: AngularVelocity) Wednesday, March 4, 2009
  • 50. // interface: float angle; float speed; Wednesday, March 4, 2009
  • 51. // interface: // viewDidLoad: float angle; angle = 45.0; float speed; speed = 4.0; Wednesday, March 4, 2009
  • 52. // interface: // viewDidLoad: float angle; angle = 45.0; float speed; speed = 4.0; // onTimer: ball.center = CGPointMake(x, y); x += cos(angle * M_PI / 180.0) * speed; y += sin(angle * M_PI / 180.0) * speed; Wednesday, March 4, 2009
  • 53. Acceleration (project files: Acceleration) Wednesday, March 4, 2009
  • 54. Acceleration + (project files: Acceleration) Wednesday, March 4, 2009
  • 56. // interface: float ax; float ay; Wednesday, March 4, 2009
  • 57. // interface: // viewDidLoad: float ax; ax = 0.07; float ay; ay = 0.1; Wednesday, March 4, 2009
  • 58. // interface: // viewDidLoad: float ax; ax = 0.07; float ay; ay = 0.1; // onTimer: ball.center = CGPointMake(x, y); x += vx; y += vy; vx += ax; vy += ay; Wednesday, March 4, 2009
  • 59. Bouncing (project files: Bouncing) Wednesday, March 4, 2009
  • 61. -x velocity y velocity y velocity x velocity Wednesday, March 4, 2009
  • 63. // interface: float bounce; Wednesday, March 4, 2009
  • 64. // interface: float bounce; // viewDidLoad: bounce = -1.0; Wednesday, March 4, 2009
  • 65. ball.center = CGPointMake(x, y); x += vx; y += vy; if(x > 300) // 320 - radius (20) { x = 300; vx *= bounce; } else if(x < 20) // 0 + radius { x = 20; vx *= bounce; } Wednesday, March 4, 2009
  • 66. if(y > 440) // 460 - radius { y = 440; vy *= bounce; } else if(y < 20) // 0 + radius { y = 20; vy *= bounce; } Wednesday, March 4, 2009
  • 67. Gravity acceleration (+y) Wednesday, March 4, 2009
  • 69. // interface: float gravity; Wednesday, March 4, 2009
  • 70. // interface: float gravity; // viewDidLoad: gravity = 0.5; Wednesday, March 4, 2009
  • 71. // interface: float gravity; // viewDidLoad: gravity = 0.5; // onTimer: vy += gravity; Wednesday, March 4, 2009
  • 73. acceleration.y acceleration.x Wednesday, March 4, 2009
  • 74. @interface GravityViewController : UIViewController <UIAccelerometerDelegate> { UIImageView *ball; float x; float y; float vx; float vy; float bounce; CGPoint gravity; } Wednesday, March 4, 2009
  • 76. // viewDidLoad gravity = CGPointZero; [[UIAccelerometer sharedAccelerometer] setDelegate:self]; Wednesday, March 4, 2009
  • 77. // viewDidLoad gravity = CGPointZero; [[UIAccelerometer sharedAccelerometer] setDelegate:self]; - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { gravity = CGPointMake(acceleration.x, -acceleration.y); } Wednesday, March 4, 2009
  • 78. // viewDidLoad gravity = CGPointZero; [[UIAccelerometer sharedAccelerometer] setDelegate:self]; - (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration { gravity = CGPointMake(acceleration.x, -acceleration.y); } // onTimer vx += gravity.x; vy += gravity.y; Wednesday, March 4, 2009
  • 79. Do we still have time? Wednesday, March 4, 2009
  • 82. // interface BOOL dragging; Wednesday, March 4, 2009
  • 83. // interface // viewDidLoad BOOL dragging; dragging = NO; Wednesday, March 4, 2009
  • 84. // interface // viewDidLoad BOOL dragging; dragging = NO; - (void)onTimer { if(!dragging) { ... } } Wednesday, March 4, 2009
  • 85. - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { UITouch *touch = [touches anyObject]; CGPoint point = [touch locationInView:self.view]; float dx = point.x - x; float dy = point.y - y; float dist = sqrt(dx * dx + dy * dy); if(dist < 20) { dragging = YES; x = point.x; y = point.y; vx = 0; vy = 0; } } Wednesday, March 4, 2009
  • 86. - (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event { dragging = NO; } Wednesday, March 4, 2009
  • 87. - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event { if(dragging) { UITouch *touch = [touches anyObject]; CGPoint point = [touch locationInView:self.view]; vx = point.x - x; vy = point.y - y; x = point.x; y = point.y; ball.center = point; } } Wednesday, March 4, 2009
  • 88. Thank you • Keith Peters • kp@bit-101.com • www.bit-101.com • www.wickedpissahgames.com • www.bit-101.com/360iDev/presentation.zip Wednesday, March 4, 2009