iOS動畫中的物理知識應用之憤怒的小鳥-重力加速度

來源:互聯網
上載者:User

iOS動畫中的物理知識應用之憤怒的小鳥-重力加速度
平拋運動

還記得初次玩憤怒的小鳥的時候,彈出小鳥那一瞬間,小鳥在空中划出的優美弧線嗎?還記得小鳥在地上彈起又落下的情境嗎?這裡就介紹一下如何?平拋運動。

1.平拋運動的物理知識

vc/ytcTL2bbI1Nqx5LTzo6i67MmrvP3Nt7XEs6S2yKOpoaM8YnIgLz4NCtPJu/mxvrXEzu/A7daqyrbO0sPH1qq1wKO6PC9wPg0KVnggPSBWeCBWeSA9IFZ5ICsgYXQNCjxwPtTavMbL47v61tC9+NDQxKPE4rXEyrG68qOsztLDx7/J0tTIz86qdMrH0ru49rWlzrvKsbzko6zL+dLU1NpZ1uG3vc/yyc9WeSA9IFZ5ICsgYaGj1eLA787Sw8e/ydLUuPhhyKHSu7j2s6PBv6Osse3KvrzTy9m2yNa1oaPP1sq1yfq77tbQYSA9IDkuOKOou/LV3zEwo6mhozwvcD4NCjxwPtTa1eK49sD919PW0KO60KHE8b2rvt/T0Muuxr23vc/ytcSz9cvZtsijrMfSyty1vc/yz8K1xNbYwaajrLy00KHE8b7f09DP8s/CtcS808vZtsijrMj0xfa1vbXYw+a+zbvhvfjQ0Le0ta+jrMvZtsi3tM/yoaM8L3A+DQo8aDMgaWQ9"2代碼實現">2.代碼實現1.設定初始量

- (void)setUpStartValue{    //在螢幕上的初始位置    self.birdX = 0;    self.birdY = 0;    //x,y軸上的初始速度    self.birdSpeedX = 10;    self.birdSpeedY = 0;    //重力加速度    self.gBirdSpeed = 9.8;}
2.類比重力環境的核心代碼
//在x軸上速度不變,每次重新整理的時候,x軸上的位置等於速度,加上前一個位置    self.birdX += self.birdSpeedX;    //在y軸上每次重新整理,小鳥的速度增加一個重力加速度    self.birdSpeedY += self.gBirdSpeed;    //y軸上的位置等於y軸上增加後的速度,加上前一個位置    self.birdY += self.birdSpeedY;    //碰到x軸螢幕邊緣,在x軸上的位置不在發生變化    if (self.birdX >= SCREENWIDTH - IMAGEWIDTH) {        self.birdX = SCREENWIDTH - IMAGEWIDTH;    }    //判斷是否觸地,如果觸碰到視窗邊界,Vy調整為相反方向    if(self.birdY >= SCREENHEIGHT - IMAGEHEIGHT)    {        self.birdY = SCREENHEIGHT - IMAGEHEIGHT;        self.birdSpeedY = -self.birdSpeedY;    }
3.項目的完整代碼
#import MRView.h#define SCREENHEIGHT   [UIScreen mainScreen].bounds.size.height#define SCREENWIDTH    [UIScreen mainScreen].bounds.size.width#define IMAGEWIDTH     50#define IMAGEHEIGHT    50@interface MRView()@property (nonatomic,strong) UIImage *imageBackgound;@property (nonatomic,strong) UIImage *imageBird;@property (nonatomic,assign) CGFloat birdX;@property (nonatomic,assign) CGFloat birdY;@property (nonatomic,assign) CGFloat birdSpeedX;@property (nonatomic,assign) CGFloat birdSpeedY;@property (nonatomic,assign) CGFloat gBirdSpeed;@end@implementation MRView- (void)awakeFromNib{    self.contentMode = UIViewContentModeRedraw;    self.backgroundColor = [UIColor blackColor];    [self setUpStartValue];}- (instancetype)initWithFrame:(CGRect)frame{    if (self = [super initWithFrame:frame]) {        [self setUpStartValue];    }    return self;}- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{    [self setUpStartValue];    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(setNeedsDisplay)];    [link addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];}- (void)setUpStartValue{    self.imageBackgound = [UIImage imageNamed:@IMG_0465.jpg];    self.imageBird = [UIImage imageNamed:@QQ20150714-1];    self.birdX = 0;    self.birdY = 0;    self.birdSpeedX = 10;    self.birdSpeedY = 0;    self.gBirdSpeed = 9;}- (void)drawRect:(CGRect)rect{    [self.imageBird drawInRect:CGRectMake(self.birdX, self.birdY, IMAGEWIDTH,IMAGEHEIGHT)];    //在x軸上速度不變,每次重新整理的時候,x軸上的位置等於速度,加上前一個位置    self.birdX += self.birdSpeedX;    //在y軸上每次重新整理,小鳥的速度增加一個重力加速度    self.birdSpeedY += self.gBirdSpeed;    //y軸上的位置等於y軸上增加後的速度,加上前一個位置    self.birdY += self.birdSpeedY;    //碰到x軸螢幕邊緣,在x軸上的位置不在發生變化    if (self.birdX >= SCREENWIDTH - IMAGEWIDTH) {        self.birdX = SCREENWIDTH - IMAGEWIDTH;    }    //判斷是否觸地,如果觸碰到視窗邊界,Vy調整為相反方向    if(self.birdY >= SCREENHEIGHT - IMAGEHEIGHT)    {        self.birdY = SCREENHEIGHT - IMAGEHEIGHT;        self.birdSpeedY = -self.birdSpeedY;    }}@end
4.運行結果

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.