重力感应 加速计- By严焕培

//  加速计-传统用法

//

//  Created by 严焕培 on 15-05-19.

//  Copyright (c) 2015年 sibu. All rights reserved.

//

#import "MainViewController.h"

#import <QuartzCore/QuartzCore.h>

@interface MainViewController () <UIAccelerometerDelegate>

{

// 小球图像

UIImageView     *_ball;

// 小球速度

CGPoint         _ballVelocity;

// 游戏时钟

CADisplayLink   *_gameTimer;

}

@end

@implementation MainViewController

/*

使用DEPRECATED描述符的方法和对象,是不推荐使用的,同时也是官方停止更新的方法

但是,只要存在,就能使用!

提示:加速剂默认是不工作,因为工作会耗电,当设置了采样频率,加速剂开始工作,同时将采样获得的数据

通过代理方法,发送给调用方

UIAcceleration的说明

* timestamp    数据采样发生的时间

* x            x 方向的加速度

* y            y 方向的加速度

* z            z 方向的加速度

}

*/

- (void)viewDidLoad

{

[super viewDidLoad];

UIImage *image = [UIImage imageNamed:@"black.png"];

_ball = [[UIImageView alloc]initWithImage:image];

[_ball setCenter:self.view.center];

[self.view addSubview:_ball];

// 小球初始静止

_ballVelocity = CGPointZero;

// 加速计

// 1. 实例化加速计,因为在手机上有且仅有一个芯片,因此使用单例来访问加速计

UIAccelerometer *accelerometer = [UIAccelerometer sharedAccelerometer];

// 2. 设置更新频率(采样频率)

[accelerometer setUpdateInterval:1 / 30.0];

// 3. 设置代理

[accelerometer setDelegate:self];

// 游戏时钟

// 1. 实例化

_gameTimer = [CADisplayLink displayLinkWithTarget:self selector:@selector(step)];

// 2. 主运行循环

[_gameTimer addToRunLoop:[NSRunLoop mainRunLoop] forMode:NSDefaultRunLoopMode];

}

#pragma mark - 时钟监听方法

- (void)step

{

[self updateBallLocation];

}

#pragma mark - 更新小球位置

- (void)updateBallLocation

{

// 根据小球位置调整中心点位置

CGPoint center = _ball.center;

// 判断小球的位置是否超出边界,如果超出边界,将小球的方向求反

// 1) 水平方向

// 如果小球的最小x值,小于0,表示左边出界

// CGRectGetMinX(_ball.frame) = _ball.frame.origin.y

// 如果小球的最大x值,大于viewW,表示右边边出界

if (CGRectGetMinX(_ball.frame) < 0 || CGRectGetMaxX(_ball.frame) > self.view.bounds.size.width) {

_ballVelocity.x *= -0.8;

// 修复小球位置

if (CGRectGetMinX(_ball.frame) < 0) {

center.x = _ball.bounds.size.width / 2;

} else {

center.x = self.view.bounds.size.width - _ball.bounds.size.width / 2;

}

}

// 2)垂直方向

if (CGRectGetMinY(_ball.frame) < 0 || CGRectGetMaxY(_ball.frame) > self.view.bounds.size.height) {

_ballVelocity.y *= -0.8;

// 修复小球位置

if (CGRectGetMinY(_ball.frame) < 0) {

center.y = _ball.bounds.size.height / 2;

} else {

center.y = self.view.bounds.size.height - _ball.bounds.size.height / 2;

}

}

center.x += _ballVelocity.x;

center.y += _ballVelocity.y;

[_ball setCenter:center];

}

#pragma mark - 加速计代理方法

- (void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration

{

// 使用加速度调整小球速度

_ballVelocity.x += acceleration.x;

_ballVelocity.y -= acceleration.y;

// 让加速剂仅负责采样数据,更新速度

[self updateBallLocation];

}

@end

时间: 2024-08-14 23:42:48

重力感应 加速计- By严焕培的相关文章

一些开源库分享 ---严焕培

1.1 UIImageCagegory图片处理 1.2 UIImageCagegoryGif动画图片处理 1.3 GIF动画 1.4 Base64编解码 1.5 科大讯飞语音识别 1.6 mp3/mp4播放 1.7 Reachability使用 1.8 AMR音频转码 1.9 JsonKit使用 1.10 MBProgressHUD 1.11 RTLabel 1.12 OC方便框架 1.13 OpenURL打电话-发短信-上网-邮件 1.14 群发短信API接口 1.15 OHAttribute

xcode 常用插件 加快开发速度 --严焕培

1.KSImageNamed-Xcode 为项目中使用的UIImage的imageNamed提供文件名自动补全功能.使用[UIImage imageNamed:@"xxx"]时,该插件会扫描整个workspace中的图片文件. 项目地址: https://github.com/ksuther/KSImageNamed-Xcode 2.CocoaPods for Xcode 非常方便的Xcode pods插件.可以很方便的在Xcode通过pods安装各种objective-c第三方库,省

重力感应游戏可行性办法研究_完结

重力感应游戏可行性办法研究 一.手机中的重力感应组件 很多人都知道手机有重力感应这个功能,但是重力感应具体是什么,却并不是很了解.重力感应组件不是摄像头,人们知道有多少万像素,不是触摸屏,人们了解是电容屏还是电阻屏,重力感应就像笼罩着迷雾的山谷,让人难以一探究竟.下文将对重力感应组件进行详细描述. 组件1:加速计 要了解加速计,首先得了解加速计是什么.实质上加速计就是用来检测手机受到的加速度的大小和方向的电子元件,而手机静置的时候是只受到重力加速度的 .所以很多人把加速计功能又叫做重力感应功能.

进阶一之Android重力感应(一)

书山有路勤为径,学海无涯苦作舟. 本讲内容:Android重力感应 下面是三轴方向 android重力感应系统的坐标系以屏幕的左下方为原点([注意]2d编程的时候,是以屏幕左上方为原点的),箭头指向的方向为正.从-10到10,以浮点数为等级单位,想象一下以下情形: 手机屏幕向上(z轴朝天)水平放置的时侯,(x,y,z)的值分别为(0,0,10); 手机屏幕向下(z轴朝地)水平放置的时侯,(x,y,z)的值分别为(0,0,-10); 手机屏幕向左侧放(x轴朝天)的时候,(x,y,z)的值分别为(1

进阶二之Android重力感应(二)

路途再远也要一步步的走不止为了生存而是对其的热爱 本讲内容:Android重力感应 一.SensorMannager传感器管理对象 1.取得SensorMannager 手机中的所有传感器都须要通过SensorMannager来访问,调用getSystemService(SENSOR_SERVICE)方法就可以拿到当前手机的传感器管理对象. sm = (SensorManager) getSystemService(SENSOR_SERVICE); 2.取得Sensor目标各类的值(getSen

coocs2d-html5在使用cocoseditor时调用设备的accelerometer来使用重力感应

在使用大牛touchsnow开发的插件cocoseditor开发游戏时遇到了一些问题,然后就试着解决,最近想试下coocs2d-html5能否使用重力感应,发现是可以的,不过这个只能在移动真机上测试,电脑上的模拟器是不行的, 首先需要在onDidloadFromCCB()方法内设置可以使用Accelerometer: this.rootNode.onAccelerometer = function (event) { this.controller.onAccelerometer(event);

cocos2d-x 重力感应

本文没你想象的那么,,复杂.事实上就是通过重力感应控制个小球移动而已. 先看头文件: [cpp] view plaincopy #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" USING_NS_CC; class HelloWorld : public cocos2d::CCLayer { public: HelloWorld(void); ~HelloWorld(vo

Cocos2D-X2.2.3学习笔记9(处理重力感应事件,移植到Android加入两次返回退出游戏效果)

这节我们来学习Cocos2d-x的最后一节,怎样处理重力感应事件,移植到Android后加入再按一次返回键退出游戏等.我这里用的Android,IOS不会也没设备呃 效果图不好弄,由于是要移植到真机上的. #ifndef __HELLOWORLD_SCENE_H__ #define __HELLOWORLD_SCENE_H__ #include "cocos2d.h" using namespace cocos2d; class HelloWorld : public cocos2d:

Unity之手机重力感应

做重力感应的朋友兴许能用上,我这里写上来用于有时候自己忘了还能看一下,因为我不认为学东西就能一辈子都记得很牢,所以有时候还是为自己行一下方便,给自己写博客,哈哈. 做Unity的重力感应游戏的时候,我们需要用到这样一个参数:Input.acceleration,这是一个Vectors3类型的一个Input的属性,它里面有三个参数分别是x,y,z.接下来给我大家贴上我画的一张图,这样大家看起来就很明了喽: 哈哈,其它我就不多说了,看不懂的朋友,说明是基础还不够