2013-02-22 1 views
0

이 글에 대해 약간 혼란스러워서 게시 할 것이라고 생각했습니다. 미안 내 제목이 명확하지 않은 경우, 매우 새로운 자바와 그것을 설명하는 방법을 잘 몰랐습니다. 어쨌든 여기까지 (문제 비트는 내가 추측) 코드 내 세트 그러니까 기본적으로이 모든 코드 단지 "육즙 부분"아닙니다 무슨 일 (실행중인 메소드를 다음 메소드로 이동하기 위해

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); 
    } 
} 

는 고양이가 화면을 가로 질러 실행하고 그때 앉아서 그 두번 긁어 버렸다고 가정한다면, 나는 진술서의 전체 힙을 사용하고 있었기 때문에 배열에 대한 도움을 받았고, 그것이 쓸데 없다는 것을 알았습니다. 고양이는 중심으로 달려가 스크래치를 계속합니다. 명백한 이유 때문에 루프에서 긁는 것, 나는 처음에 루프를 반복하지 않고 moveOut 메서드로 이동하는 방법을 혼란스럽게 생각합니다. 미안하지만 약간 불분명하다면, 나는 이것에 대해 매우 새롭습니다. 나와 맺으십시오.

미리 감사드립니다.

+0

그냥 제쳐두고, 당신의'scratch()'메소드'scratchTwice()'의 이름을 바꾸는 것을 고려 해보았습니까? 여기서는별로 중요하지 않지만 크고 복잡한 시스템에서의 기능을 정확하게 반영한 메소드 이름을 갖는 것이 중요하다는 것을 알 수있을 것입니다. – Edd

답변

-1

for 문을 끝내면 scratch()에서 i를 증가시키지 않습니다.

for (int i = xPos; i < getWidth(); i++) 
+0

getWidth()가 화면 너비를 반환하기 때문에 OP가 원하는 것은 아닙니다. 이것은 스프라이트가 이미 화면의 중앙에 있기 때문에 getWidth()/2 번을 반복합니다 ... 그리고 그는 또한 "스크래치"단계 dirung 이미지를 옮기고 싶지 않습니다 ... – ppeterka

+0

고마워요. 고양이를 움직여서 긁으십시오. – Sim

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() 함수에서 스프라이트는 움직이지 않습니다. 화면의 엔도에 도달하지 않습니다 ... 그래서 오즈는 긁는 정도의 두 배에 이르는 드로잉 단계를 두 번 반복해야합니다. 그 숫자를 <how many frames the scratching takes> 자리 표시 자에 넣어야합니다. 그러면 제대로 작동합니다.

편집xPos=i; scratch() ...

+0

흠 ... 이것은 고양이를 다시 설정하게하고, 긁는 데 걸리는 프레임이 얼마나 많은지 알아낼 수있는 이상적인 방법으로 고양이는 여전히 두 번 스크래치해야합니다. 그런 다음 다른 기능을 수행해야합니다. 그를 실행하는 동안 화면 끝까지 – Sim

+0

@ user1667456 아, 또 다른 문제가 있습니다. 잠시만 기다려! – ppeterka

+0

오, 난 그냥 고쳐, 롤, 어리석은 오류 xPos가 = 거기에 어떤 이유로 든 떠 다니는 – Sim

관련 문제