反弹小球和加速度传感器的使用

反弹小球和加速度传感器的使用(UIAccelerometer)

序言:

我们都见过人家做的小球运动,现在我们一起也做一个自己的小球运动。

今天的小球的效果是:程序运行后,将在画面中间,有一个小球,然后,你倾斜手机,小球将向着手机倾斜的方向飞移动,碰到四壁的时候将会反弹回来。

正文:

首先,我们要讲一下思路;

第一: 在UIViewController的子类里追加UIAccelerometerDelegate的协议,只有这样画面才能接收到速度的通知。接着我们创建小球的对象,和两个方向的加速度值;

代码如下:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIAccelerometerDelegate>

{
   //我们创建3个对象

    UIImageView*_imageView;

    //小球X方向的速度

    UIAccelerationValue  _speedX;

     //小球Y方向的速度

    UIAccelerationValue  _speedY;

}
@end

第二:在-(void)viewDidLoad中创建小球的对象并实现。代码

-(void)viewDidLoad{
     [super viewDidLoad];
    [self makeUI];
 }

-(void)makeUI
{
     self.view.backgroundColor=[UIColor greenColor];
     //追加球体
     UIImage * image=[UIImage imageNamed:@"qiu.png"];
     _imageView=[[UIImageView alloc]initWithImage:image];
     _imageView.center=self.view.center;
    //让小球自适应
    _imageView.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleTopMargin;
     [self.view addSubview:_imageView];
 }

第三:我们在-(void)viewWillAppear:(BOOL)animated中开始加速度传感器的使用。首先用UIAccelerometer中的定义的sharedAccelerometer方法获取UIAccelerometerd的单一实例;设置次实例的updateInterval属性设置未SELF ,这样-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration 方法就能接收到加速度通知的信息。 
代码:

-(void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

    //开始获取加速度传感器传过来的值
    UIAccelerometer*accelermeter=[UIAccelerometer sharedAccelerometer];
    accelermeter.updateInterval=1.0/60.0;//《60HZ
    accelermeter.delegate=self;

}

第四:小球的处理。。。代码:

//处理从加速度传感器接收来的通知
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{

   //在X轴上附加X轴上的加速度
    _speedX+=acceleration.x;

    //在Y轴上附加Y轴上的加速度

    _speedY+=acceleration.y;

    CGFloat  posX=_imageView.center.x+_speedX;
    //根据速度调整球体位置的坐标
    CGFloat  posY=_imageView.center.y-_speedY;

    //根据速度调整球体的做标
    if (posX<.0) {

        //碰到边框反弹的处理

        posX=.0;

        _speedX*=-0.4;//返回的加速度

    }else if (posX>self.view.bounds.size.width)
    {

        posX=self.view.bounds.size.width;
        _speedX=-.4;
    }

    if (posY<.0) {

        posY=.0;
        _speedY=.0;
    }else if (posY>self.view.bounds.size.height)
    {

        posY=self.view.bounds.size.height;
        _speedY*=-1.5;//碰到下边框1.5倍返回
    }

    _imageView.center=CGPointMake(posX, posY);

}

第五:当画面消失的时候,代码

-(void)viewWillDisappear:(BOOL)animated{

    [super viewWillDisappear:animated];

    _speedX=_speedY=.0;
    //结束从加速传感器取值
    UIAccelerometer*accelerometer=[UIAccelerometer sharedAccelerometer];
    accelerometer.delegate=nil;
 }

第六:我们已经完成。下面是效果展示:

     
 

完整代码:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UIAccelerometerDelegate>

{
   //我们创建3个对象

    UIImageView*_imageView;

    //小球X方向的速度

    UIAccelerationValue  _speedX;

     //小球Y方向的速度

    UIAccelerationValue  _speedY;

}
@end
#import "ViewController.h"
#import "Mylabel.h"

@implementation ViewController
-(void)viewDidLoad{
     [super viewDidLoad];
    [self makeUI];
 }

-(void)makeUI
{
     self.view.backgroundColor=[UIColor greenColor];
     //追加球体
     UIImage * image=[UIImage imageNamed:@"qiu.png"];
     _imageView=[[UIImageView alloc]initWithImage:image];
     _imageView.center=self.view.center;
    //让小球自适应
    _imageView.autoresizingMask=UIViewAutoresizingFlexibleLeftMargin|UIViewAutoresizingFlexibleRightMargin|UIViewAutoresizingFlexibleBottomMargin|UIViewAutoresizingFlexibleTopMargin;
     [self.view addSubview:_imageView];
 }
-(void)viewWillAppear:(BOOL)animated{

    [super viewWillAppear:animated];

    //开始获取加速度传感器传过来的值
    UIAccelerometer*accelermeter=[UIAccelerometer sharedAccelerometer];
    accelermeter.updateInterval=1.0/60.0;//《60HZ
    accelermeter.delegate=self;

}

-(void)viewWillDisappear:(BOOL)animated{
         [super viewWillDisappear:animated];
         _speedX=_speedY=.0;
    //结束从加速传感器取值
    UIAccelerometer*accelerometer=[UIAccelerometer sharedAccelerometer];
    accelerometer.delegate=nil;
 }
//处理从加速度传感器接收来的通知
-(void)accelerometer:(UIAccelerometer *)accelerometer didAccelerate:(UIAcceleration *)acceleration
{
        //在X轴上附加X轴上的加速度
    _speedX+=acceleration.x;
         //在Y轴上附加Y轴上的加速度
         _speedY+=acceleration.y;
          CGFloat  posX=_imageView.center.x+_speedX;
    //根据速度调整球体位置的坐标
    CGFloat  posY=_imageView.center.y-_speedY;

    //根据速度调整球体的做标
    if (posX<.0) {
                //碰到边框反弹的处理
                 posX=.0;
         _speedX*=-0.4;//返回的加速度
          }else if (posX>self.view.bounds.size.width)
    {
               posX=self.view.bounds.size.width;
        _speedX=-.4;
    }
        if (posY<.0) {

        posY=.0;
        _speedY=.0;
    }else if (posY>self.view.bounds.size.height)
    {
                posY=self.view.bounds.size.height;
        _speedY*=-1.5;//碰到下边框1.5倍返回
    }

          _imageView.center=CGPointMake(posX, posY);

     }

 @end

友情快递:

UITextView的监视状态

UITextViewDelegate协议的方法列表
方法名 调用时机
-(BOOL)textViewShouldBeginEditing:(UITextView *)textView 编辑开始前被调用。如果返回NO,编辑将不会开始。

-(BOOL)textViewShouldEndEditing:(UITextView *)textView

编辑结束前被调用,如果返回NO编辑不会结束。

-(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

改变文本前被调用,向range中设置变化范围,text中设置变化后的字符串。返回NO变化不会反应。

-(void)textViewDidBeginEditing:(UITextView *)textView

编辑开始前被调用。UITextView *变成第一相应着时被调用。
-(void)textViewDidEndEditing:(UITextView *)textView

编辑结束后,被调用,UITextView *失去第一相应着时被调用。
-(void)textViewDidChange:(UITextView *)textView

文本变更时被调用。结果是没输入一个字符都会被调用
-(void)textViewDidChangeSelection:(UITextView *)textView 游标移动,选着范围变化时调用
时间: 2024-10-13 21:09:34

反弹小球和加速度传感器的使用的相关文章

与Wii控制手柄通信的托管代码库(转)

2009-01-16 翻译 HID Human Input Device     人工输入设备 Wii Fit Balance Board       平衡板 IR                          红外传感器 Windows Driver Kit          Windows驱动开发包 Wiimote                     Wii控制手柄 Report                      报文 2007-3-14 在Coding4Fun发布 在本文中

IOS 开发入门—打砖块小游戏

忙着期末考试,读书笔记断更了~ ios 游戏处女作—demo 游戏规则 屏幕上方有四排砖块 点击屏幕开始游戏 游戏开始时,小球向上方运行 小球与砖块撞击可以撞碎砖块并反弹 小球与屏幕顶部.右侧.左侧碰撞会反弹 小球与挡板碰撞会反弹 左右移动手指可以挪动挡板 小球从屏幕下方掉出游戏结束 撞碎所有砖块游戏胜利 手机游戏的使用习惯 除非是非常出色的游戏或者游戏模式所迫,否则最好使用竖版的模式,适合用户单手操作手机,比较方便.而 iPad 则最好使用横版. 游戏类的屏幕一般要把手机上面的状态栏隐藏.不同

本人讲课时录制的Android应用开发技术教学视频

网盘地址:http://yun.baidu.com/pcloud/album/info?query_uk=1963923831&album_id=3523786484935252365 本人讲课时录制的视频,采用webex录制,视频文件内容相对较小30-50兆左右,1个视频文件平均大概有1个小时左右的时间,每个例子基本上从建立项目开始边做边讲. 由于讲课范围是Android应用开发技术,视频没涉及搭建环境,基础控件的使用等基础内容. 主要内容包括: 后台服务. 服务的绑定.服务和线程.远程服务和

四轴飞行器一些资料

针对购买我们套件的同学和没有买到匿名四轴套件但是想移植我们飞控程序的和还没确定用什么程序的同学,我提几个建议,都是个人看法,大家觉得对就看看,觉得不对就当没看. 首先硬件,具体比赛做什么有什么要求,我没参加比赛,了解的不太清楚,但听大家说做四周,轴距小于50,续航10分,有保护套这些 不同人不同团队有不同的硬件解决方法,我就不多讲,购买我们套件的,在程序上就会省很大力气,程序本来就是针对我们套件写的,不用移植,但是我们的飞机太小,连电池一共34G左右,续航不到5分,载重10G以下,很难满足比赛要

Android 传感器开发 完全解析

转载请注明出处:http://blog.csdn.net/smartbetter/article/details/53161452 大家好,由于最近会有对智能硬件相关的开发需求,所以最近这些天分享的博文也就大致挂钩智能硬件了,像上一篇的蓝牙分享,相信很多读者已经看过了,那么今天我为大家带来Android传感器方面知识的介绍与使用方法,对于传感器的使用,不同版本的Android手机也许存在较大的硬件差异,但是万变不离其宗,本篇将通过几个最常见的传感器,渗透式的教会大家如何使用这些传感器,带领大家完

进阶篇-安卓系统:5.安卓手机位置传感器

android平台提供了两个传感器用语确定设备的位置,这两个传感器是磁场传感器和方向传感器.Android平台还提供了测量设备正面到某一个临近物体距离的传感器(邻近传感器).磁场传感器和邻近传感器是基于硬件传感器. 用途:可以组合磁场传感器和加速度传感器测量设备相对于地磁北极的位置,还可以利用方向传感器确定当前设备相对自身参照系的位置. 磁场传感器和方向传感器都返回三个值,邻近传感器返回一个值. 方向三个值的含义: event.valuss[0]:绕着Z轴旋转的角度.如果Y轴正对北方,该值是0.

小白学phoneGap《构建跨平台APP:phoneGap移动应用实战》连载一(PhoneGap中的API)

之前本博连载过<构建跨平台APP:jQuery Mobile移动应用实战>一书.深受移动开发入门人员的喜爱. 从如今開始,连载它的孪生姐妹书phoneGap移动应用实战一书,希望以前是小白的你们,已经变成了大白. 3.6  PhoneGap中的API能干什么 本章主要介绍进行PhoneGap开发前所须要做好的准备,那么如今是不是该介绍一些关于PhoneGap的事了呢?事实上PhoneGap就是将HTML写成的页面显示出来.然后通过特定的JavaScript获取几组数据而已. 尽管说使用Phon

传感器 Sensor 加速度【示例】

简介 坐标系 x轴:从左到右 y轴:从下到上 z轴:从内到外 这个坐标系与Android 2D API中的不同,传感器中的返回值都以此坐标系为准. SENSOR_TYPE_ACCELEROMETER       1 //加速度 SENSOR_TYPE_MAGNETIC_FIELD      2 //磁力 SENSOR_TYPE_ORIENTATION         3 //方向 SENSOR_TYPE_GYROSCOPE           4 //陀螺仪 SENSOR_TYPE_LIGHT 

四轴飞行器飞行原理与双闭环PID控制

四轴轴飞行器是微型飞行器的其中一种,相对于固定翼飞行器,它的方向控制灵活.抗干扰能力强.飞行稳定,能够携带一定的负载和有悬停功能,因此能够很好地进行空中拍摄.监视.侦查等功能,在军事和民用上具备广泛的运用前景. 四轴飞行器关键技术在于控制策略.由于智能控制算法在运行复杂的浮点型运算以及矩阵运算时,微处理器计算能力受限,难以达到飞行控制实时性的要求:而PID控制简单,易于实现,且技术成熟,因此目前主流的控制策略主要是围绕传统的PID控制展开. 1 四轴飞行器的结构与基本飞行原理 四轴飞行器结构主要