【发布时间】:2014-05-08 00:48:51
【问题描述】:
我正在 Android 中创建 2D 游戏。我对如何有效地编写代码感到困惑,否则从长远来看它会带来性能问题。
目前我正在使用策略模式。这是我的代码。
public void setCharAnimDirection(
CharacterAnimationDirection charAnimDirection) {
if(charAnimDirection == CharacterAnimationDirection.NorthEast ||
charAnimDirection == CharacterAnimationDirection.NorthWest) {
if (super.getCharAnimType() == CharacterAnimationType.Attack) {
super.setCharAnim(new AttackBackAnim());
} else if (super.getCharAnimType() == CharacterAnimationType.Battle) {
super.setCharAnim(new BattleBackAnim());
} else {
}
} else {
if (super.getCharAnimType() == CharacterAnimationType.Attack) {
super.setCharAnim(new AttackFrontAnim());
} else if (super.getCharAnimType() == CharacterAnimationType.Battle) {
super.setCharAnim(new BattleFrontAnim());
} else {
}
}
这里的问题是,一个角色在我的游戏中总是改变它的方向,因此每次都创建一个小对象。 我读过一本关于创建小型短期对象的旧书(2009 年),当它们堆积起来时,它会强制虚拟机(在我的情况下为 dalvik)进行垃圾收集,从而暂停其他进程,有时会给你带来滞后。但我不确定它目前是否仍适用于最新的虚拟机和垃圾回收。
那么,将他们的方法放在一个类中并执行 if-else 会提高性能还是只是给我一个凌乱的代码? 例如这段代码。
if (character.getCharAnimDirection() == CharacterAnimationDirection.NorthWest) {
g.drawPixmap(AnimAssets.battleBackAnim, character.getX()
+ BTL_XOFFSET, character.getY() + BTL_YOFFSET,
frameBlock, 0, BTL_FRAME_WIDTH, BTL_FRAME_HEIGHT);
} else if (character.getCharAnimDirection() == CharacterAnimationDirection.SouthWest) {
g.drawPixmap(AnimAssets.battleFrontAnim, character.getX()
+ BTL_XOFFSET, character.getY() + BTL_YOFFSET,
frameBlock, 0, BTL_FRAME_WIDTH, BTL_FRAME_HEIGHT);
} else if (character.getCharAnimDirection() == CharacterAnimationDirection.NorthEast) {
g.drawMirroredPixmap(AnimAssets.battleBackAnim,
character.getX() - BTL_XOFFSET + 40, character.getY()
+ BTL_YOFFSET, frameBlock, 0, BTL_FRAME_WIDTH,
BTL_FRAME_HEIGHT);
} else {
g.drawMirroredPixmap(AnimAssets.battleFrontAnim,
character.getX() - BTL_XOFFSET + 20, character.getY()
+ BTL_YOFFSET, frameBlock, 0, BTL_FRAME_WIDTH,
BTL_FRAME_HEIGHT);
}
或者有没有更有效和更清洁的方法来实现这一点?
非常感谢您的帮助,谢谢!
【问题讨论】:
标签: java android performance dalvik strategy-pattern