2014-06-07 2 views
1

마치 내가 끌기 방법을 사용할 수없는 것처럼 보입니다. ??? bullet.draw (batcher) 이 작동하지 않아 총알이 스프라이트 인 이유를 이해할 수없는 것 같습니다. 나는 Sprite []를 만들고 애니메이션으로 추가했습니다. 수 있습니까? libgdx는 스프라이트 나 애니메이션을 그려 내지 않을 것입니다.

은 내가
batcher.draw(AssetLoader.bulletAnimation.getKeyFrame(runTime), bullet.getX(), bullet.getY(), bullet.getOriginX()/2, bullet.getOriginY()/2, bullet.getWidth(), bullet.getHeight(), 1, 1, bullet.getRotation()); 

을 시도하지만 그나마 작업, 그것은 그립니다 유일한 방법은 아래의 코드는이

batcher.draw(AssetLoader.bulletAnimation.getKeyFrame(runTime), bullet.getX(), bullet.getY()); 

입니다.

// 이것은 자산 클래스에

texture = new Texture(Gdx.files.internal("SpriteN1.png")); 
texture.setFilter(TextureFilter.Nearest, TextureFilter.Nearest); 

bullet1 = new Sprite(texture, 380, 350, 45, 20); 
bullet1.flip(false, true); 

bullet2 = new Sprite(texture, 425, 350, 45, 20); 
bullet2.flip(false, true); 

Sprite[] bullets = { bullet1, bullet2 }; 
bulletAnimation = new Animation(0.06f, bullets); 
bulletAnimation.setPlayMode(Animation.PlayMode.LOOP); 

//이

public class GameRender() { 
private Bullet bullet; 
private Ball ball; 

public GameRenderer(GameWorld world) { 
myWorld = world; 
cam = new OrthographicCamera(); 
cam.setToOrtho(true, 480, 320); 

batcher = new SpriteBatch(); 
// Attach batcher to camera 
batcher.setProjectionMatrix(cam.combined); 

shapeRenderer = new ShapeRenderer(); 
shapeRenderer.setProjectionMatrix(cam.combined); 

// Call helper methods to initialize instance variables 
initGameObjects(); 
initAssets(); 
} 

private void initGameObjects() { 
ball = GameWorld.getBall(); 
bullet = myWorld.getBullet(); 
scroller = myWorld.getScroller(); 
} 

private void initAssets() { 
ballAnimation = AssetLoader.ballAnimation; 
bulletAnimation = AssetLoader.bulletAnimation; 
} 

public void render(float runTime) { 

Gdx.gl.glClearColor(0, 0, 0, 1); 
Gdx.gl.glClear(GL30.GL_COLOR_BUFFER_BIT); 

batcher.begin(); 
// Disable transparency 
// This is good for performance when drawing images that do not require 
// transparency. 
batcher.disableBlending(); 

// The ball needs transparency, so we enable that again. 
batcher.enableBlending(); 


batcher.draw(AssetLoader.ballAnimation.getKeyFrame(runTime), ball.getX(), ball.getY(),   ball.getWidth(), ball.getHeight()); 

batcher.draw(AssetLoader.bulletAnimation.getKeyFrame(runTime), bullet.getX(),  bullet.getY()); 

// End SpriteBatch 
batcher.end(); 
} 
} 

는 게임 세계 클래스

public class GameWorld { 

public static Ball ball; 
private Bullet bullet; 
private ScrollHandler scroller; 

public GameWorld() { 
ball = new Ball(480, 273, 32, 32); 
bullet = new Bullet(10, 10); 
scroller = new ScrollHandler(0); 
} 

public void update(float delta) { 
ball.update(delta); 
bullet.update(delta); 
scroller.update(delta); 
} 

public static Ball getBall() { 
return ball; 
} 

public ScrollHandler getScroller() { 
return scroller; 
} 

public Bullet getBullet() { 
return bullet; 
} 
} 

어쨌든이 //이있는 GameRender 클래스를하다 스프라이트가 작동하도록 만드시겠습니까?

글 머리 기호 클래스를 추가하여 거기에 문제가 있는지 확인할 수 있습니다.

public class Bullet extends Sprite { 

public static final float BULLET_HOMING = 6000; 
public static final float BULLET_SPEED = 300; 
private Vector2 velocity; 
private float lifetime; 

public Bullet(float x, float y) { 
    velocity = new Vector2(0, 0); 
    setPosition(x, y); 
} 

public void update(float delta) { 
    float targetX = GameWorld.getBall().getX(); 
    float targetY = GameWorld.getBall().getY(); 
    float dx = targetX - getX(); 
    float dy = targetY - getY(); 

    float distToTarget = (float) Math.sqrt(dx * dx + dy * dy); 
    dx /= distToTarget; 
    dy /= distToTarget; 
    dx *= BULLET_HOMING; 
    dy *= BULLET_HOMING; 
    velocity.x += dx * delta; 
    velocity.y += dy * delta; 

    float vMag = (float) Math.sqrt(velocity.x * velocity.x + velocity.y * velocity.y); 
    velocity.x /= vMag; 
    velocity.y /= vMag; 
    velocity.x *= BULLET_SPEED; 
    velocity.y *= BULLET_SPEED; 

    Vector2 v = velocity.cpy().scl(delta); 
    setPosition(getX() + v.x, getY() + v.y); 
    setOriginCenter(); 
    setRotation(velocity.angle()); 
    lifetime += delta; 
    setRegion(AssetLoader.bulletAnimation.getKeyFrame(lifetime)); 
} 
} 
+0

당신이 게시 할 이미지를 너무 청소해야이

Vector2 target = new Vector2(GameWorld.getBall().getX(), GameWorld.getBall().getY()); target.sub(getX(), getY()); target.nor().scl(BULLET_HOMING); velocity.add(target.scl(delta)); velocity.nor().scl(BULLET_SPEED); Vector2 v = velocity.cpy().scl(delta); translate(v.x, v.y); setOriginCenter(); setRotation(velocity.angle()); 

에 업데이트 방법은? –

+0

이미지 게시 위치? 게임? 그렇다면 TextureRegions이고 textureRegions를 회전 할 수 없습니다. 방법이 있지만 너무 힘들어요. –

답변

2

귀하의 키 프레임 배열이라는 글 머리 기호에 보관됩니다,하지만 당신은 애니메이션의 생성자를 호출 할 때 두 번째 인수로 '목표'라는 것을 전달합니다. 당신은 같이 '총알'을 전달하는 대신 시도해야합니다 :

bulletAnimation = new Animation(0.06f,bullets); 

당신은 Sprite 클래스는 TextureRegion를 확장으로 스프라이트는 [] 내 생각은 사용에 문제가 없어야합니다.

------

영업 이익은 오타를 수정하고 여전히 ------

나는 문제가 batcher.draw() 전화의 기원에 인수 될 것이라고 생각 작동하지 않았다. Sprite의 위치는 SpriteBatch의 좌표계의 원점을 기준으로하며 Sprite의 원점은이 위치 (즉, Sprite 사각형의 왼쪽 아래 모서리)를 기준으로합니다. Sprite의 중심에서 원점을 얻으려면 originX가 너비/2이고 원점이 높이/2 여야한다고 생각합니다. 그래서 시도 :

batcher.draw(AssetLoader.bulletAnimation.getKeyFrame(runTime),bullet.getX(),bullet.getY(), bullet.getWidth()/2,bullet.getHeight()/2,bullet.getWidth(),bullet.getHeight(),1,1,bullet.getRotation()); 

당신의 getOriginX/Y 방법은 SpriteBatcher의 좌표 시스템 (화면 좌표)를 기준으로 기원을 반환하는 경우, 다음 스프라이트 회전 및 말도 안되는 원산지 주위를 확장하고 끝낼 수 있기 때문에 화면 밖으로 그려져있다.

나는 그것이 옳고 그것이 문제가 해결되기를 바랍니다.

----- 영업 이익은 더 코드는 '총알'클래스 -----을 게시

당신은 지정하지 않은 때문에, 이러한 0.0f로 반환됩니다 드로우 방법에 bullet.getWidth()bullet.getHeight() 전화 그 (것)들을위한 가치. 실제로 그리는 스프라이트는 AssetLoader 클래스에서 bullet1과 bullet2라는 것을 기억하십시오.글 머리 기호의 너비와 높이를 다음과 같이 설정해보십시오.

setSize(AssetLoader.bullet1.getWidth(), AssetLoader.bullet1.getHeight()); 

글 머리 기호 생성자

나는 당신이 실제로 그리기있는 스프라이트가 bullet1하고 2

손가락이 넘어 때문에, 다시 어느 글 머리 기호 클래스에서 setRegion()를 사용할 필요가 있다고 생각하지 않습니다.

+0

미안하지만 나는 글 머리 기호를 전달하고 있습니다. 그러나 bullet.draw (배터)를 사용하면 여전히 그려지지 않습니다. –

+0

bullet.getOriginX/Y로 무엇을하는지 알아낼 수 없습니다. 왜이 값의 절반입니까? 이 함수는 첫 번째로 스케일링/회전의 원점을 반환합니까? 이 함수들은 무엇을 반환합니까? – ArthurBrown

+0

나는 그걸 시도해 보라고 알았지 만 그것 없이는 끌지 않는다. –