我刚开始开发Android游戏。我正在尝试为Sprite制作动画,并且我已经成功地完成了此操作,但是现在我通过按钮进行绘制,这样我就可以开始移动播放器了,它们应该处于正确的位置。有人可以帮我吗?在桌面版本上看起来不错,但在我的Android手机上却不行。
这是我的主要课程代码。
package com.Adventcloud.RealGame;
public class RealGame implements ApplicationListener {
private OrthographicCamera camera;
private SpriteBatch batch;
//private Texture background;
private AnimatedSprite playerAnimated;
//Buttons
public static Texture leftButton;
public static Texture rightButton;
public static Texture shootButton;
public static Texture jumpButton;
@Override
public void create() {
int width = Gdx.graphics.getWidth();
int height = Gdx.graphics.getHeight();
Texture.setEnforcePotImages(false);
camera = new OrthographicCamera();
camera.setToOrtho(false, 1280, 720);
leftButton = new Texture(Gdx.files.internal("leftButton.png"));
rightButton = new Texture(Gdx.files.internal("rightButton.png"));
shootButton = new Texture(Gdx.files.internal("shootButton.png"));
jumpButton = new Texture(Gdx.files.internal("jumpButton.png"));
batch = new SpriteBatch();
//background = new Texture(Gdx.files.internal(""));
Texture spaceshipTexture = new Texture(Gdx.files.internal("spritesheet.png"));
Sprite playerSprite = new Sprite(spaceshipTexture);
playerAnimated = new AnimatedSprite(playerSprite);
playerAnimated.setPosition(1280/2, 0);
}
@Override
public void dispose() {
batch.dispose();
}
@Override
public void render() {
Gdx.gl.glClearColor(0.95f, 0.95f, 0.95f, 0.95f);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
batch.setProjectionMatrix(camera.combined);
batch.begin();
//batch.draw(background, 0, 0);
playerAnimated.draw(batch);
batch.draw(leftButton, 0, 0, Gdx.graphics.getWidth()/4, Gdx.graphics.getHeight()/6);
batch.draw(rightButton, Gdx.graphics.getWidth()/4, 0, Gdx.graphics.getWidth()/4, Gdx.graphics.getHeight()/6);
batch.draw(shootButton, (Gdx.graphics.getWidth()/4)*2, 0, Gdx.graphics.getWidth()/4, Gdx.graphics.getHeight()/6);
batch.draw(jumpButton, (Gdx.graphics.getWidth()/4)*3, 0, Gdx.graphics.getWidth()/4, Gdx.graphics.getHeight()/6);
batch.end();
}
@Override
public void resize(int width, int height) {
}
@Override
public void pause() {
}
@Override
public void resume() {
}
}
这是我的动画精灵的代码
package com.Adventcloud.RealGame;
public class AnimatedSprite {
private static final int FRAME_COLS = 16;
private static final int FRAME_ROWS = 16;
private static final int IDLE_COLS = 4;
private static final int IDLE_ROWS = 1;
private Sprite sprite;
private Animation animation;
private TextureRegion[] frames;
private TextureRegion currentFrame;
private float stateTime;
public AnimatedSprite(Sprite sprite){
this.sprite = sprite;
Texture texture = sprite.getTexture();
TextureRegion[][] temp = TextureRegion.split(texture, texture.getWidth() / FRAME_COLS, texture.getHeight() / FRAME_ROWS);
frames = new TextureRegion[IDLE_COLS * IDLE_ROWS];
//Animation for idling ======================================
int index = 0;
for (int i = 0; i < IDLE_ROWS; i++) {
for (int j = 1; j <= IDLE_COLS; j++) {
frames[index++] = temp[i][j];
}
}
animation = new Animation(0.2f, frames);
stateTime = 0f;
//end of idle animation ====================================
}
public void draw(SpriteBatch spriteBatch) {
stateTime += Gdx.graphics.getDeltaTime();
//continue to keep looping
currentFrame = animation.getKeyFrame(stateTime, true);
spriteBatch.draw(currentFrame, sprite.getX() - 32, sprite.getY() + 128, 128, 128);
}
public void setPosition(float x, float y){
float widthOffset = sprite.getWidth() / FRAME_COLS;
sprite.setPosition(x- widthOffset / 2, y);
}
}
这实际上是相机的用途(至少其中之一)。您可以使用自定义视口,它将按比例放大以适合屏幕/窗口。例如,如果您希望宽高比为16/9,并且屏幕的宽度应为80个“世界单位”(也许是米?),那么请使用80宽度和45高度的视口。因此,请使用“camera = new OrthographicCamera(80, 45);
创建一个摄像机”,该摄像机的宽度为80个单位,高度为45个单位,中间为P(0,0)。通过这样做一Texture
,大小的1
,是20px
宽和20px
高一上1600*900px
屏幕,10px
宽,10px
高一上800*450px
屏幕。在坐标P(0,0)处绘制对象将在屏幕中间绘制其左下角,在P(-40,0)处进行绘制将在屏幕左边界处绘制对象。不要忘记告诉SpriteBatch
使用此相机:
spriteBatch.setProjectionMatrix(camera.combined);
要移动相机,请使用camera.translate(deltaX, deltaY);
如果您移动相机或旋转相机或执行其他操作,则更改其矩阵的操作不会忘记调用camera.update()
。
现在,您可以计算“ worldunits”中的所有内容,并将其放大以适合屏幕大小。希望我能帮上忙
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句