博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Iphone连轴画的实现
阅读量:6239 次
发布时间:2019-06-22

本文共 1629 字,大约阅读时间需要 5 分钟。

http://blog.chukong-inc.com/index.php/2012/02/08/iphone连轴画的实现/

本文只讨论横屏连轴画的实现,竖屏连轴画的原理相同不做讨论

本文不会直接给出结论,而是还原作者当初的思路,把问题解决的过程再现。

本文作者系初学者,水平有限,请多多请教!

问题的背景是:游戏背景从右往左按一定速度无限移动,只有一张480*320的背景图。

背景图命名为background.png

首先想到的是声明一CCSprite *bg;

bg = [CCSprite spriteWithFile:@" background.png"];

把bg加入场景中来,然后在update函数中改变bg的位置

比如[bg setPosition:CGPointMake((int)( bg. position .x-shudu *dt), bg.position.y)];

shudu是移动的速度 int型

这时运行程序就可以看到背景图background.png徐徐向左移动,不要开心太早因为在右边出现了黑色的背景,这种效果显然不是我们想要的。

这时我们想到再声明一CCSprite *bg2;

bg2 = [CCSprite spriteWithFile:@" background.png"];

把bg2的位置设为(480,320)

[bg addchild:bg2]

再运行程序这时看到背景徐徐向左移动 并且右边出现了重复的背景,向目标迈进了一步。但是没过几秒,右边又出现了黑色的背景,并逐步变大。

 

这时我们想到背景bg已经向左移动了480个单位 位置是(-480,0),应该把bg的位置设为(0, 0)

于是我们在update中加了一个判断,

if((bg position].x < -480)

{bg的位置设为(0,0)

}

再次运行程序就可以看到背景图background.png不断的向左移动好像没有尽头。大功告成,不免要玩赏一下,看着看着高兴的心凉了下来,因为屏幕幕的右边有规律的会出现一条竖着的黑线,然后向右闪动一下。百思不得其解之下改变了一下速度shudu的值,发现shudu越大时闪动越明显。

只能再次好好冷静下来分析一下原因所在,检查一下思路,问题锁定在if((bg position].x < -480)

{bg的位置设为(0,0)

}

拿出纸笔画了一下示意图会发现(bg position].x < -480)条件有问题,不能等bg position].x < -480的时候再设置bg的位置,而是if(([bg position].x+480) < shudu*dt)即bg到-480的距离小于bg一帧移动的距离的时候就应该设置它的位置了,于是把判断条件改掉,运行发现还是有一点点的闪动,没有出现黑线。

再次画一画示意图我们发现if(([bg position].x+480) < shudu*dt)条件成立时我们设置bg的位置(0,0)是不对的,通过计算发现 应该是bg setPosition:CGPointMake((int)(([bg position].x+480)-shudu*dt ) , 0)];

if(([bg position].x+480) < shudu*dt)

    {

        [bg setPosition:CGPointMake((int)(([bg position].x+480)-shudu*dt ) , 0)];

    }else{

        [bg setPosition:CGPointMake((int)([bg position].x-shudu*dt*20), 0)];

    }

再次运行,一切正常,功能实现了。这是一个很简单的功能,但是实现过程却不像想象中的简单,分析原因如下,和新手共勉:

1、想当然,想问题过于主观。

2、没有分析问题,在全面了解问题之前就下手去做,边做边想走了弯路

转载地址:http://fvdia.baihongyu.com/

你可能感兴趣的文章
修改ssh和ssl版本号 升级openssl
查看>>
kubernetes 拉取私有镜像 imagepullsecrets
查看>>
[转]数据交换指定实现无锁堆栈
查看>>
C语言:井字棋盘的实现
查看>>
RabbitMQ消息应答------ack机制
查看>>
我的友情链接
查看>>
IOS中的KVO机制详解
查看>>
关于未捕获异常(Uncaught Exception)的处理
查看>>
Windows2003下面文件夹带权限移动
查看>>
怎么样将自己开发的Android应用程序编译到系统Image中
查看>>
kali 安装完成后,无法进入界面
查看>>
TortoiseSvn问题汇总(持续更新)
查看>>
html5中的锚点特效
查看>>
我的友情链接
查看>>
超时机制的简单实现
查看>>
maillog中不记录收发的邮件
查看>>
CentOS 开机自动联网
查看>>
windows:查看进程路径及PID,并杀掉进程
查看>>
JSP语法之八大隐式对象
查看>>
我的友情链接
查看>>