隧道效应cocos2d


12

我正在寻找在COCOS2D(iOS)中创建类似的隧道效果。有人可以提出任何建议吗?

参考图片

参考视频1

参考视频2

到现在为止,我已经尝试使用比例减小的多个环形精灵,并将中心定位到同一点,并且对于每个较小的精灵,Z也会保持递减。

这样,使用CCScaleTo对其进行动画处理,并随着动画持续时间将其大小更改为2.0,但是无论如何它都不会接近参考文献中所示的隧道效果。

谢谢,山姆

Answers:


10

我从作者那里发现了这种效果的实现描述:

在2D平面上创建深度错觉当然需要做很多工作。

不过,原理很简单:圆圈从屏幕的中间开始,缩放比例为0。然后,隧道的第一个圆圈开始按比例缩放,这与所经过的时间成比例(线性缩放不起作用),一段时间后,第二个圆圈开始缩放,然后是3号和4号,依此类推。

然后,按比例降低圆的Alpha值(最后面的圆的Alpha值比前面的圆的Alpha值低,以产生模糊效果),定义每个圆必须遵循的路径,移动X和Y坐标,然后将一艘太空船放在屏幕中间。倾斜设备可使隧道在左右移动,上下移动(但这给人的印象是飞船正在移动!)。

圆圈离开屏幕后,它们会迅速消失并放回初始位置(以节省内存,因此我不需要创建新的圆圈,但我可以重复使用相同的圆圈)。

对不起我的英语,但我希望能解释一下总体思路:)


1

您几乎拥有多个Z值和比例递减的环形精灵。只是不要将它们全部居中。

您需要跟踪希望隧道到达较远事件范围的点。您可以随时间推移随意移动该点。

然后,在放置每个新的精灵时,将其放置在该点上,将其缩小,按照自己的喜好设置其不透明度,然后CCSpawnCCScaleTo和开头CCFadeTo,例如:

sprite->runAction(CCSpawn::create(
    CCScaleTo::create(2.0f, 1.5f),
    CCFadeTo::create(5.0f, 255),
    nullptr));

预先创建所有精灵,然后旋转后面的精灵以保持其效率。



0

老实说,我不认为该图像是使用2D相机渲染的。看起来游戏是使用3D渲染系统渲染的。但是,由于要使用cocos2d,因此需要自己模拟3D转换矩阵。首先是一个想法:您知道在3D场景中,每个对象都由3个标量值x,y和z定义。您可以使用的最简单方法是按照您的建议进行缩放,但不能按照您的实现进行缩放!ccScaleTo将导致线性缩放,这不会产生3D感觉。您可以从按缩放对象开始1/z。这在某种程度上与您可以想到的最简单的投影矩阵相同!如果您甚至觉得不满意,请查看更现代,更复杂的投影矩阵

旁注:在cocos2D中实现自定义投影矩阵会有点脏。如果您真的不喜欢这种效果,我强烈建议您将引擎更改为支持3D的引擎。


我不想引入3d来使事情变得更复杂,但是这种效果是在cocos2d中实现的,用于渲染假隧道视图(我有时与该游戏的作者进行过交谈)
Saurabh Passolia 2012年

0

这是我的做法,用伪代码

激活隧道效应:

  1. 创建一个CCRepeatForever(CCFunc(createCircle))
  2. 在场景中添加一个名为“ ViewNode”的节点

createCircle()

  1. 在场景中心创建图层,位置。将其作为子项添加到“ ViewNode”。
  2. 运行操作:CCSequence(CCEaseExponentialIn(CCScaleTo),CCRemoveSelf)
  3. 将东西放置在您的图层中,例如cirkels,敌人,宇宙飞船等。

控制(带视差)

  1. 对于具有隧道效应的所有层(即ViewNode的子级)
  2. 根据触摸位置更新锚点位置。

该位置是消失点,因此,如果不移动消失点就无法移动图层。但是,如果移动锚点,则该层似乎会移动,但是消失点保持不变-这会产生视差效果,因为在封闭层(大范围)上移动ccp(0.2,0.2)的效果比在远处移动相同的对象。

您将所有内容包装在相同大小的图层中,以确保重新定位锚的位置在所有图层中均产生相同的运动。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.