Я пишу 2D -игру в Pure Java без каких -либо подсказок, таких как использование Unreal Engine и т. Д. Причина, по которой я хочу сделать все от царапины, для учебных целей. Тем не менее, я не хочу просто копировать то, что я читаю/смотрю, но вводим изменения всякий раз, когда у меня есть идея для того, чтобы сделать определенный аспект игры более интересным. В будущем я хотел бы добавить еще больше состояний, например, например, специальное состояние после использования объектов с питанием, когда персонаж игрока может работать очень быстро или делать другие необычные вещи = каждое такое состояние является другим состоянием анимации. /> Следуя очень хорошо сделанному видео-учебнику о Java 2D, я создал простую анимацию ходьбы (= активное состояние), но я не могу добавить к нему эту непрерывную анимацию состояния (= когда не нажимаю на какую-либо ключ, который я хотел бы, чтобы мой герой просто встал и мгнул, но вместо этого программа продолжала использовать только картинки для активного состояния). Я не буду перечислять их здесь, так как это создаст очень длинный пост. Одна идея, которую я еще не проверил, состоит в том, чтобы иметь две отдельные темы в моей игре-один для каждого состояния анимации (состояние непрерывного и активного состояния), но я не уверен, что это правильное мышление, а затем, как именно мне следует реализовать две темы: создание двух методов обновлений или что? Должен ли я сосредоточиться на Method Update () или есть больше изменений в коде, необходимых для достижения моего конца?
Вот мой текущий код, который не работает. Я не смог поместить его в свой основной пост из-за проблем формата кода.public class Player extends Characters {
GamePanel gp;
public KeyInputHandler keyInputHandler;
public Player(GamePanel gp, KeyInputHandler keyInputHandler) {
this.gp = gp;
this.keyInputHandler = keyInputHandler;
setDefaults();
getPlayerImage();
}
public void setDefaults() {
x = 100;
y = 100;
speed = 4;
direction = "right";
idle = "right";
}
public void getPlayerImage() {
try {
up1 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_back_1-1.png.png")));
up2 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_back_1-2.png.png")));
up3 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_back_1-3.png.png")));
down1 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_front_2-1.png.png")));
down2 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_front_2-2.png.png")));
down3 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_front_2-3.png.png")));
down4 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_front_2-5.png.png")));
down5 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_front_2-6.png.png")));
left1 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_left_1-1.png.png")));
left2 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_left_1-2.png.png")));
left3 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_left_1-3.png.png")));
left4 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_left_1-4.png.png")));
left5 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_left_1-5.png.png")));
right1 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_right_1-1.png.png")));
right2 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_right_1-2.png.png")));
right3 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_right_1-3.png.png")));
right4 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_right_1-5.png.png")));
right5 = ImageIO.read(Objects.requireNonNull(getClass().getResourceAsStream("/Player/Tina_right_1-6.png.png")));
} catch (IOException e) {
e.printStackTrace();
e.getMessage();
}
}
public void update() {
if(!keyInputHandler.upPressed && !keyInputHandler.downPressed && !keyInputHandler.leftPressed && !keyInputHandler.rightPressed){
updateWhenIdle();
}
if (keyInputHandler.upPressed || keyInputHandler.downPressed || keyInputHandler.leftPressed || keyInputHandler.rightPressed) {
updateWhenActive();
}
}
public void updateWhenActive(){
if (keyInputHandler.upPressed) {
direction = "up";
y -= speed;
} else if (keyInputHandler.downPressed) {
direction = "down";
y += speed;
} else if (keyInputHandler.leftPressed) {
direction = "left";
x -= speed;
} else if (keyInputHandler.rightPressed) {
direction = "right";
x += speed;
}
spriteCounter++;
if (spriteCounter > 13) {
if (spriteNumber == 1) {
spriteNumber = 2;
} else if (spriteNumber == 2) {
spriteNumber = 1;
}
spriteCounter = 0;
}
}
public void updateWhenIdle(){
// if (!keyInputHandler.upPressed) {
// idle = "up";
// } else if (!keyInputHandler.downPressed) {
// idle = "down";
// } else if (!keyInputHandler.leftPressed) {
// idle = "left";
// } else if (!keyInputHandler.rightPressed) {
// idle = "right";
// }
spriteIdleCounter++;
if(spriteIdleCounter > 9){
if(spriteIdleNumber == 3){
spriteIdleNumber = 4;
}else if(spriteIdleNumber == 4){
spriteIdleNumber = 5;
}else if(spriteIdleNumber == 5){
spriteIdleNumber = 3;
}
spriteIdleCounter = 0;
}
}
public void draw(Graphics2D g2) {
//BufferedImage image_ = null;
//image_ = right1;
g2.drawImage(right1,x,y,gp.tileSize, gp.tileSize, null);
//g2.setColor(ColorUIResource.cyan);
//g2.fillRoundRect(x, y, gp.tileSize, gp.tileSize,5,4);
BufferedImage image = null;
switch(idle){
case "up":
if(spriteNumber == 3){
image = up1;
}
if(spriteNumber == 4){
image = up1;
}
if(spriteNumber == 5){
image = up1;
}
break;
case "down":
if(spriteNumber == 3){
image = down1;
}
if(spriteNumber == 4){
image = down2;
}
if(spriteNumber == 5){
image = down3;
}
break;
case "left":
if(spriteNumber == 3){
image = left1;
}
if(spriteNumber == 4){
image = left2;
}
if(spriteNumber == 5){
image = left3;
}
break;
case "right":
if(spriteNumber == 3){
image = right1;
}
if(spriteNumber == 4){
image = right2;
}
if(spriteNumber == 5){
image = right3;
}
break;
}
switch(direction) {
case "up":
if(spriteNumber == 1){
image = up2;
}
if(spriteNumber == 2){
image = up3;
}
break;
case "down":
if(spriteNumber == 1) {
image = down4;
}
if(spriteNumber == 2){
image = down5;
}
break;
case "left":
if(spriteNumber == 1){
image = left4;
}
if(spriteNumber == 2){
image = left5;
}
break;
case "right":
if(spriteNumber == 1){
image = right4;
}
if(spriteNumber == 2){
image = right5;
}
break;
}
g2.drawImage(image,x,y,gp.tileSize,gp.tileSize,null);
}
}
Подробнее здесь: https://stackoverflow.com/questions/796 ... -whether-a
Как переключаться между двумя анимационными состояниями для одного и того же героя, исходя из того, нажимается ли клавиш ⇐ JAVA
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Как я могу назначить 5 участков 8 людям на справедливой основе, исходя из их предпочтений?
Anonymous » » в форуме Python - 0 Ответы
- 34 Просмотры
-
Последнее сообщение Anonymous
-