我有一个在屏幕上运行,停在屏幕中间划伤两次猫。 我当前的代码看起来像
private void scratch(){
for (int i = xPos; i < getWidth(); i+=0) {
xPos = i;
// swap images
if (currentImage == nekoPics[0])
currentImage = nekoPics[2];
else if (currentImage == nekoPics[2])
currentImage = nekoPics[4];
else if (currentImage == nekoPics[4])
currentImage = nekoPics[5];
else if (currentImage == nekoPics[5])
currentImage = nekoPics[4];
else if (currentImage == nekoPics[4])
currentImage = nekoPics[5];
else
currentImage = nekoPics[0]
有没有使如果else语句不是让他们在这样一个巨大的圆圈会更简单的方法?
在此先感谢(PS:我想你可以用某种形式的反做到这一点,但我不是如何去这个这么肯定,任何帮助表示赞赏)
你可以保持当前图像的索引,并增加它在每次迭代,比如:
currentImage = nekoPics[currentIndex%6];
currentIndex++;
要么
currentImage = nekoPics[currentIndex];
if (++currentIndex==6) currentIndex=0;
这就要求在nekoPics图像根据动画的顺序进行排序。
除地图建议的其他地方,你可以只使用一个数组; 你需要保留当前图像的索引的轨迹:
int[5] nextImageList
= { 2, ?, 4, 5, 4 }
next = nextImageList[currentImageIndex];
currentImage = nekoPics[next];
currentImageIndex = next;
没有“如果”你需要初始化currentImage和currentImageIndex后。 我不知道,如果是1有效的索引的任何地方,如果没有,什么都可以在阵列中的1个插槽去。
如果你从你的屏幕前获得停止猫它可能会更容易代码...
说真的,不过,你可以通过做一个定义你的照片序列中的对象解决这个问题。
我要发布类似的答案, rcook ,使用数组。 我认为这是理解的最简单的解决方案。
他的回答,然而,有关于阵列尺寸稍有不慎。 我张贴这种的完整性,但信贷应直接向他。
// Elsewhere, in your initialization:
int currentImageIndex = 0; // Assuming [0] is your first image.
int[] nextImageList = { 2, -1, 4, -1, 5, 4 };
// Given the current index, this array will direct you
// to the next image index. Those -1 are unknown (to us).
// Set them to the values you need.
private void scratch() {
for (int i = xPos; i < getWidth(); ) {
xPos = i;
// Swap images.
currentImageIndex = nextImageList[currentImageIndex];
currentImage = nekoPics[currentImageIndex];
// What else you were doing here.
}
}