我很喜欢写一个2D游戏&我偶然发现了一个问题。 我的游戏是基于平铺的(约12x9平铺),一般情况下一切都很好,但是当角色移动时,框架会变得模糊,并出现黑色部分。
我的背景是基于图块的,我认为这是由于错放它们造成的。 在我看来,它正在发生,因为我有一个更新线程和一个绘图线程,它们都使用相同的变量,例如:
private int x, y;
public void update() {x++; y += 2;}
public void draw(Canvas canvas) {canvas.drawBitmap(someImage, x, y);}
(注意:我刚刚做了这个,所以我会更容易理解我在谈论的内容。)
结果是在绘制时更新的某些图块之间存在(黑色)间隙。
如果我说得对,我想我需要解决关键部分问题。 所以我尝试通过同步线程并使它们以串行方式工作来静音数据。 结果真的很难过:我的银河系S真的很慢,绝对无法玩!
我的另一个想法(我真的不想这样做)是为游戏中的每个可绘制对象添加一个“drawAction”类,它将保存对象的“快照”,只有这个“快照”集合才会是互斥的,所以我可以让绘图线程完成他的工作,而不会被更新线程打断。
请与我分享您的想法。 我希望你有更好的解决方案,或者如果我对这个问题不对,也许你可以帮我解决问题。
编辑: 我的游戏通常工作正常,但在慢速设备(如模拟器)上,干扰更明显。 当玩家角色没有移动时,它会在行走时淹没并且几乎。 我更喜欢只使用我的代码,所以我想解决这个问题,而不仅仅是使用一些引擎或框架。
答案 0 :(得分:1)
这不能直接回答你的问题,但它应该有所帮助。考虑使用游戏引擎AndEngine。对于基于2D平铺的游戏,它非常流畅且非常容易学习。
答案 1 :(得分:0)
问题:我有一个“写作”线程和一个使用dame源/目的地的“阅读”线程。
我通过在读取之前创建我的共同数据的“快照”或“影子”(技术上是副本...)解决了我的问题并且在这样做时保持写入数据,因此一些读取数据是“旧的“但与其他人在同一个日期。 我看到的黑色东西是通过在绘制数据时更新数据来绘制(x,y)的差异。