首页 / IOS / iOS动画中的物理知识应用-重力加速度
iOS动画中的物理知识应用-重力加速度
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了iOS动画中的物理知识应用-重力加速度,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3202字,纯文字阅读大概需要5分钟。
内容图文
平抛运动
还记得初次玩愤怒的小鸟的时候,弹出小鸟那一瞬间,小鸟在空中划出的优美弧线么?还记得小鸟在地上弹起又落下的场景么?这里就介绍一下如何实现平抛运动。
1.平抛运动的物理知识
从图中我们可以看出物体在抛出之后,在X轴方向上速度不变。但是随着时间的变化Y轴方向的速度在变大(红色箭头的长度)。
由基本的物理知识我们知道:
- Vx = Vx
- Vy = Vy + at
在计算机中进行模拟的时候,我们可以认为t是一个单位时间,所以在Y轴方向上Vy = Vy + a。这里我们可以给a取一个常量,表示加速度值。现实生活中a = 9.8(或者10)。
在这个例子中:小鸟将具有水平方向的初速度,且受到向下的重力,即小鸟具有向下的加速度,若碰到地面就会进行反弹,速度反向。
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@implementationMRView
- (void)awakeFromNib
{
self.contentMode = UIViewContentModeRedraw;
self.backgroundColor = [UIColor blackColor];
[self setUpStartValue];
}
- (instancetype)initWithFrame:(CGRect)frame
{
if (self = [super initWithFrame:frame]) {
[self setUpStartValue];
}
returnself;
}
- (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.运行结果
版权声明:本文为博主原创文章,未经博主允许不得转载。
原文:http://blog.csdn.net/supersonico/article/details/46933245
内容总结
以上是互联网集市为您收集整理的iOS动画中的物理知识应用-重力加速度全部内容,希望文章能够帮你解决iOS动画中的物理知识应用-重力加速度所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。