我正在使用OpenGL ES为iPhone开发2D游戏,我想使用320x480位图图像作为持久背景.
我的第一个想法是创建一个320x480四边形然后将纹理映射到它上面代表背景.所以...我创建了一个512x512纹理,上面有320x480图像.然后我将其映射到320x480四核.
我每帧都画这个背景,然后在它上面绘制动画精灵.除了绘制所有这些对象(背景+精灵)太慢之外,这种方法很好.
我做了一些测试,发现我的减速是在像素管道中.毫不奇怪,大背景图像是罪魁祸首.为了证明这一点,我删除了背景绘制,其他所有内容都非常快速地呈现.
我正在寻找有关如何保持背景并提高性能的建议.
这里有更多信息:
1)我目前正在模拟器上测试(仍在等待Apple获得许可)
2)背景是压缩到128k的PVR纹理
3)我曾希望有一种方法可以将这个背景缓存到一个颜色缓冲区中但是没有任何运气.这可能是由于我对OpenGL ES缺乏经验,或者它可能是一个不起作用的愚蠢想法:)
4)我意识到整个背景并不总是必须刷新,只是被移动的精灵所绘制的部分.我开始研究用于刷新(根据需要)背景部分的技术,可以是单独的纹理,也可以是剪刀盒,但这似乎不太优雅.
任何提示/建议将不胜感激......
谢谢.
如果html图像地图支持Mobile Safari中的触摸事件,那么有人能告诉我吗?我需要使用图像映射,因为我有不规则形状的可点击区域.我的测试显示支持鼠标事件(但是以有限的方式)并且触摸事件似乎根本不会发生.
我做了这个最简单的测试:
<img id="polygon_images" src="http://s18.postimg.org/7xvo1f9tl/polygons.png" alt="Polygons" border="0" usemap="#my_polygons" />
<map id="my_polygons" name="my_polygons">
<area shape="poly" alt="blue" title="Mouse" coords="95,40,171,99,139,189,37,188,14,96" onmousedown="writeMessage(event, 'm-down');" onmouseup="writeMessage(event, 'm-up');" onmousemove="writeMessage(event, 'm-move');" onmouseout="writeMessage(event, 'm-out');" />
<area shape="poly" alt="red" title="Touch" coords="269,42,345,96,317,191,215,189,193,97" ontouchstart ="writeMessage(event, 't-start');" ontouchend="writeMessage(event, 't-end');" ontouchmove="writeMessage(event, 't-move');" ontouchcancel="writeMessage(event, 't-cancel');" />
</map>
<div id="message_box"></div>
Run Code Online (Sandbox Code Playgroud)
蓝色多边形适用于鼠标事件.红色多边形用于触摸事件.
当我在常规Safari中查看此页面时,单击或将鼠标悬停在蓝色多边形上会触发事件,如我所料.当然,红色多边形什么都不做(因为桌面不支持触摸事件)
但是,当我在iPad上查看此页面时,蓝色多边形会在单击时触发三个鼠标移动,mousedown,mouseup,而不是其他任何内容.更糟糕的是,触摸红色多边形什么也没做!
我完全希望我错过了一些简单的东西,但如果没有,我真的很想知道发生了什么.