我目前正在使用surfaceView编写Android游戏。我尽可能地优化了游戏并且运行得非常顺利。但是,我有碰撞检测,这有点凌乱。我想通过直接从画布读取像素来进行碰撞检测。这可能吗?我发现最接近这个是使用setBitmap将新位图附加到画布。然后,当我画到画布时,位图将被更新。这会是要走的路吗?感谢。
答案 0 :(得分:1)
虽然您应该以不同的方式管理碰撞检测,但您可以使用下一行代码获取给定位置的像素颜色:
mView.mBitmap.getPixel(j, i)
mView是包含画布的视图,mBitmap是用于创建画布的位图:
Canvas mCanvas = new Canvas(mBitmap);
答案 1 :(得分:0)
来自Canvas API:
Canvas类持有“平局” 调用。画一些东西,你需要4 基本组件:一个用于保存的位图 像素,一个Canvas来托管绘图 调用(写入位图),a 绘图原语(例如Rect,Path, 文本,位图)和绘画(到 描述颜色和样式 图)。
所以你不会要求画布提供像素数据,因为画布本身并不真正“拥有”像素数据。用于进行绘制调用的画布始终附加到位图(您正在绘制的位图),因此位图是您应该从中获取像素数据的位置。
碰撞检测通常成本很高,但是基于位图的过程可能会使情况变得更糟,这取决于您尝试做什么。只是一个抬头。
答案 2 :(得分:0)
我同意乔希。如果精度在您的应用程序中非常重要,您可能希望将屏幕尺寸/分辨率数据合并到某种物理引擎中。试图完全基于可视化处理来构建物理引擎可能是不必要的代价。