2017-01-05 14 views
0

개체를 쉽게 들락날락하게하려고합니다.Slick2D로 Java로 쉬기

하지만 렌더링 할 때 잘 동작하지만 다른 객체가 다른 객체와 직접적으로 반대 방향으로 동작합니다.

개체가 위로 향하면 "유령"개체가 바로 반대쪽으로 향하게됩니다. 그것은 이상한 화면 찢어짐 효과를줍니다. 나는 vsync를 켜 보려고했지만 그게 더 나 빠지게 보였다. 객체는 slick2d 사각형입니다. 또한 몇 초 동안 완전히 사라지거나 심지어는 치수가 변할 때마다 나 없이는 직선으로 영구히 돌아가는 버릇이 있습니다. 이것은 업데이트 코드입니다.

@Override 
public void update(GameContainer gc, StateBasedGame game, int delta) throws SlickException { 
    // TODO Auto-generated method stub 

    Input i=gc.getInput(); 
    d=2000/delta; 
    if(i.isKeyDown(Input.KEY_DOWN)){ 
     if(frames<d) 
     frames++; 

     if(frames==1)b=hele.getY(); 
     hele.setY(Quad.easeInOut(frames, b, 720-b-50, d));//the 50 is the size of the sprite 
     //c+=10; 
    } 
    else if(i.isKeyDown(Input.KEY_UP)){ 
     if(frames<d) 
     frames++; 

     if(frames==1)b=hele.getY(); 
     hele.setY(Quad.easeInOut(frames, b, -b, d)); 

    } 



} 

github에 대한 쉬운 공식은 here입니다.

다른 곳에서 키를 놓으면 프레임이 재설정됩니다. 스프라이트가 헬리콥터처럼 동작하도록하려고합니다. 헬리콥터를 더 좋아하게 만드는 방법을 알고 있다면 지식을 공유하십시오!

답변

0

나는 델타를 업데이트 할 때마다 업데이트로 인해 화면이 찢어지는 문제를 발견 한 것 같습니다! 일정하게 유지하면 문제가 해결됩니다. 대신에 I 대신 델타 타이머를 사용하여, 프레임 카운트를 사용

... 델타를 사용하여 시간 추적 및 I 프레임을 사용하는 모든 장소, I는 경과 시간으로 치환

if(elapsedtime<d) 
       elapsedtime+=delta; 

.

if(frames==1){b=getCBox().getY();} 
      getCBox().setY(Bounce.easeOut(elapsedtime, b, 720-b-getCBox().getHeight(), d)); 

그러나, 나는 여전히 델타는 항상 신뢰할 수 없습니다에 대한 첫 번째 업데이트를 식별 할 프레임 수를 사용했다. 이 사람을 도움이 https://bitbucket.org/BallisticBlaze/helirush-game/

희망 :

전체 소스

은 여기에 자식에서 찾을 수 있습니다.

+0

자동 응답 기능은 완벽하지만, 업데이트 된 코드로 설명하는 내용을 설명 할 수 있습니까? – Gimby

+0

좋아, 나중에 그렇게 할거야. – BallisticBlaze