我这里有一些代码,它需要一个精灵表,并通过吸收我的图像的长度和宽度,并通过行和列将其划分为单独的精灵。这适用于我的测试精灵表,但不是我真正要在游戏中使用的。
我的动画课在这里:
package Simple;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Batch;
import com.badlogic.gdx.graphics.g2d.TextureRegion;
import com.badlogic.gdx.graphics.g2d.Animation;
public class RunningMan {
private Texture texture;
private TextureRegion[] walkFrames;
private Animation walkAnimation;
private float stateTime = 0f;
private TextureRegion currentFrame;
int rows = 5;
int cols = 6;
public RunningMan(Texture texture) {
this.texture = texture;
TextureRegion[][] tmp = TextureRegion.split(texture, texture.getWidth() / cols, texture.getHeight() / rows); // split the sprite sheet up into its 30 different frames
walkFrames = new TextureRegion[rows * cols];
int index = 0;
for(int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
walkFrames[index++] = tmp[i][j]; // Put the 30 frames into a 1D array from the 2d array
}
}
walkAnimation = new Animation(0.06f, walkFrames); // initialize the animation class
stateTime = 0f;
}
public void draw(Batch batch) {
stateTime += Gdx.graphics.getDeltaTime(); // stateTime is used to determine which frame to show
if(stateTime > walkAnimation.getAnimationDuration()) stateTime -= walkAnimation.getAnimationDuration(); // when we reach the end of the animation, reset the stateTime
currentFrame = walkAnimation.getKeyFrame(stateTime); // Get the current Frame
batch.draw(currentFrame,50,50); // draw the frame
}
}
我的动画课在这里:
package Simple;
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;
public class Animation extends ApplicationAdapter {
SpriteBatch batch;
RunningMan man;
@Override
public void create () {
batch = new SpriteBatch();
man = new RunningMan(new Texture(Gdx.files.internal("WalkingMan.png")));
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
man.draw(batch);
batch.end();
}
}
当我使用随身听时。png,代码完美无瑕。但当我去使用任何其他精灵床单时,比如WalkingWoman。jpg(我不担心这个不透明),当列和行被相应地调整时,对齐是关闭的。有什么建议吗?
an.png
步行oman.jpg
“动画”类似乎通过假设精灵表图像中的所有帧间隔均匀,将源图像分割为帧。因此,对于WalkingMan图像,512x512px原稿被分成30帧,每帧宽85.33px(512/6列),高102.4px(512/5行)。
如你所说,如果你调整步行者图像的列数和行数(1300x935),你会得到36帧,每帧144.44px宽(1300/9列),233.75px高(935/4行)。
问题是WalkingLady spritesheet没有使每个帧均匀地间隔。如果你把第一帧从图像中分割出来,你会得到这个:
看看她的右脚是怎么被切断的
WalkingMan映像将每个映像放置在一个大小相同的边界框内的spritesheet中。你只需要确保每个帧以相同的方式均匀间隔。
我在Java和Slick2D方面有几年的经验,我正试图将一个游戏移植到libgdx,因为它是一个更好的库。然而,我有一个简单的问题在屏幕上移动精灵。这个应用编程接口一定有一些我不理解的范例。我将我的代码提炼成以下内容。它识别输入,并在我的整个实体和网络系统中运行它,无论是在服务器上还是从服务器上,但是精灵保持在同一个位置。任何帮助都会很棒。 我的create()方法: getCurrentX/Y方
好吧,我真的很困惑,我以前旋转过精灵,没有问题,比如当船在海洋中移动时旋转它,但是出于某种原因,这次我遇到了一个非常大的问题。所以我在资产文件中创建了一个纹理,但不是静态纹理。我使用以下方式加载纹理: 然后我通过调用来调用主类中的资产: 然后我有一个专门为这个主要角色设计的动画课程,因为他的动画与其他角色非常不同。 然后我有一个渲染类来绘制所有东西,我有对象在一个名为的世界对象中,我用以下方式绘制
从精灵图(雪碧图)中创建精灵【为了防止与精灵混淆,我在之后的译文中都将采用雪碧图这一译法】 你现在已经知道了怎么从一个单文件内加载图像。但是作为一个游戏设计师,你没准更经常使用 雪碧图(也被称之为 精灵图)。Pixi封装了一些方便的方式来处理这种情况。所谓雪碧图就是用一个单文件包含你游戏中需要的所有文件,这里就是一个包含了游戏对象和游戏觉得的雪碧图。 整个雪碧图是192192像素宽高,但每一个单图
有一个运行Libgdx的Android应用程序,其中有很多精灵。目前,我根据它们所属的类别给它们涂上不同的颜色,例如“红色”、“绿色”、“蓝色”等。然而,我认为我更喜欢只给雪碧的一部分涂颜色,而不是整个雪碧。 目前我使用: 用于给批次上色,并将其应用于整个雪碧。当那一组完成后,我改变颜色,转到下一组。当完成分组时,我重置批次颜色。 有没有着色器/搅拌器的方式只着色精灵的一部分?例如,任何在我的纹理
问题内容: 我一直在尝试一个小程序,将桌面图像设置为当前的“每日天文图片”。我一直在使用JNA建议从类似的问题()设置墙纸。但是,我的代码无法正常工作。我不确定出什么问题- 我对JNA的经验很少。这是代码。请忽略完全误导的类名-我从另一个项目开始着手。无效的部分是墙纸的最终设置-没有错误提示,它什么也没做。图像保存良好。 编辑-我决定制作一个批处理文件来设置注册表项并运行它。批处理文件有时可以工作
我试图在登录窗口(stage)内创建一个精灵动画,使用JavaFX,一旦用户获得登录和密码信息,就会播放该动画。我试图使用Michael Heinrichs在他的博客文章中发布的关于使用JavaFX的sprite动画的类,但我无法使其工作,主要是因为我不知道如何在ImageView中创建这个动画,而不使用start方法(在我的情况下也不起作用)。 这是我在登录阶段的FXML文件中的代码: 在控制器