0

对这个有点困惑,所以我想我会发布。对不起,如果我的标题不清楚,对 java 很陌生,不知道如何解释。无论如何,到目前为止,这是我的代码集(我猜的问题位)

int currentImageIndex = 0; // Assuming [0] is your first image.
int[] nextImageList = { 2, 4, 5, 4, 5, 4, 5, 0, 1 };

public void nekoRun() {
    moveIn();
    scratch();
    moveOut();

private void moveIn() {
    for (int i = 0; i < getWidth()/2; i+=10) {
        xPos = i;
        // swap images
        if (currentImage == nekoPics[0]) 
            currentImage = nekoPics[1];
        else 
            currentImage = nekoPics[0];
        repaint();
        pause(150);

private void scratch() {
    for (int i = xPos; i < getWidth();) {
        xPos = i;

        // Swap images.
        currentImageIndex = nextImageList[currentImageIndex];
        currentImage = nekoPics[currentImageIndex];



            repaint();
            pause(150);
        }
}

private void moveOut() {
    for (int i = xPos; i < getWidth(); i+=10) {
        xPos = i;
        // swap images
        if (currentImage == nekoPics[0]) 
            currentImage = nekoPics[1];

        else 
            currentImage = nekoPics[0];
        repaint();
        pause(150);
    }   
}

所以基本上会发生什么(这不仅仅是“多汁的部分”的所有代码,一只猫会跑过屏幕然后坐下来,它应该抓两次,我得到了一些关于数组的帮助,因为我只是使用了一个整体一堆 else if 语句,我知道那是多余的。猫会跑到中心,它会抓挠,并不断抓挠,出于明显的原因,我只是对如何让它移动感到困惑到 moveOut 方法上,而不是一直循环从头开始。对不起,如果这有点不清楚,我对此很陌生,所以请多多包涵。

提前致谢

4

2 回答 2

2

你的问题被称为无限循环......而不是

private void scratch() {
    for (int i = xPos; i < getWidth();) {

这应该读

private void scratch() {
    for (int i = 0; i < 2*<how many frames the scratching takes>; i++) {
    // **UPDATE** the xPos=i; shouldn't be here!!!

解释:

看来您已经从 moveIn() 函数复制了循环定义,在这种情况下这似乎是合法的。发生了一些事情,直到它到达屏幕的中间。但是在scratch()函数中,精灵不会移动,它永远不会到达屏幕的尽头......所以 ozu 必须重复绘制步骤两次划痕跨度的帧数。您必须将该数字放入<how many frames the scratching takes>占位符中,它应该可以工作。

编辑xPos=i; _ 不应该出现在scratch()...

于 2013-02-22T13:47:19.830 回答
-1

您没有在 scratch() 中增加 i ,将 i++ 放在 for 语句的末尾。

for (int i = xPos; i < getWidth(); i++)
于 2013-02-22T13:47:13.973 回答