Программисты JAVA общаются здесь
Anonymous
Как заставить моего персонажа прыгать в 2D-играх с Java?
Сообщение
Anonymous » 16 апр 2024, 16:35
Я делаю 2D-игру (например, Марио) на Java. У меня все хорошо, но сейчас я занят реализацией прыжка.
Это код классов Player и KeyManager:
Код: Выделить всё
package game.entity;
import game.CollisionManager;
import game.GamePanel;
import game.KeyManager;
import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
public class Player extends Entity {
GamePanel gamePanel;
KeyManager keyManager;
CollisionManager collisionManager;
public int screenX;
public int screenY;
public int maxHeight;
public Player(GamePanel gamePanel, KeyManager keyManager) {
this.gamePanel = gamePanel;
this.keyManager = keyManager;
this.collisionManager = new CollisionManager(gamePanel);
screenX = gamePanel.screenWidth / 2 - (gamePanel.tileSize / 2);
screenY = gamePanel.screenHeight / 2 - (gamePanel.tileSize / 2);
solidArea = new Rectangle(20, 0, 15, gamePanel.tileSize);
setDefaultValue();
getPlayerImage();
}
public Player() {
}
public void setDefaultValue() {
worldX = gamePanel.tileSize;
worldY = gamePanel.tileSize * 7;
maxHeight = (int) worldY;
velY = 0;
velX = 0;
jumpVelocity = 50;
speed = 3;
direction = "idle";
}
public void getPlayerImage() {
//TODO: Get player image
try {
up = ImageIO.read(getClass().getResourceAsStream("/game/textures/idle.png"));
left1 = ImageIO.read(getClass().getResourceAsStream("/game/textures/left1.png"));
left2 = ImageIO.read(getClass().getResourceAsStream("/game/textures/left2.png"));
right1 = ImageIO.read(getClass().getResourceAsStream("/game/textures/right1.png"));
right2 = ImageIO.read(getClass().getResourceAsStream("/game/textures/right2.png"));
down = ImageIO.read(getClass().getResourceAsStream("/game/textures/down.png"));
idle = ImageIO.read(getClass().getResourceAsStream("/game/textures/idle.png"));
} catch (IOException e) {
e.printStackTrace();
}
}
public void update() {
if (keyManager.jumpPressed || keyManager.downPressed || keyManager.leftPressed || keyManager.rightPressed) {
velX = 3;
velY = 2;
if (keyManager.jumpPressed && isOnPlatform()) {
worldY-=velY;
}
if (keyManager.downPressed) {
direction = "down";
}
if (keyManager.leftPressed) {
direction = "left";
}
if (keyManager.rightPressed) {
direction = "right";
}
}else {
velX = 0;
}
//Check collision
collisionOn = false;
gamePanel.collisionManager.checkTile(this);
if (!collisionOn) {
switch (direction) {
case "left":
worldX -= velX;
break;
case "right":
worldX += velX;
break;
case "down":
worldY += speed;
break;
}
}
// Animation changer
spriteCounter++;
if (spriteCounter > 15) {
spriteNumber = (spriteNumber == 1) ? 2 : 1;
spriteCounter = 0;
}
}
public void draw(Graphics2D g2) {
//g2.setColor(Color.WHITE);
//g2.fillRect(x, y, gamePanel.tileSize, gamePanel.tileSize);
BufferedImage image = null;
switch (direction) {
case "space":
image = idle;
break;
case "down":
image = down;
break;
case "left":
if (spriteNumber == 1)
image = left1;
if (spriteNumber == 2)
image = left2;
break;
case "right":
if (spriteNumber == 1)
image = right1;
if (spriteNumber == 2)
image = right2;
break;
case "idle":
image = idle;
}
g2.drawImage(image, screenX, screenY, gamePanel.tileSize, gamePanel.tileSize, null);
}
void jump() {
if (!jumping) {
jumping = true;
gravity -= 0.1;
setVelY(-gravity);
worldY -= gravity;
System.out.println(jumping);
}
if (gravity 0 ) {
worldY--;
jumpVelocity--;
}
Если кто-нибудь сможет помочь, буду признателен.
Подробнее здесь:
https://stackoverflow.com/questions/783 ... -with-java
1713274559
Anonymous
Я делаю 2D-игру (например, Марио) на Java. У меня все хорошо, но сейчас я занят реализацией прыжка. Это код классов Player и KeyManager: [code]package game.entity; import game.CollisionManager; import game.GamePanel; import game.KeyManager; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; public class Player extends Entity { GamePanel gamePanel; KeyManager keyManager; CollisionManager collisionManager; public int screenX; public int screenY; public int maxHeight; public Player(GamePanel gamePanel, KeyManager keyManager) { this.gamePanel = gamePanel; this.keyManager = keyManager; this.collisionManager = new CollisionManager(gamePanel); screenX = gamePanel.screenWidth / 2 - (gamePanel.tileSize / 2); screenY = gamePanel.screenHeight / 2 - (gamePanel.tileSize / 2); solidArea = new Rectangle(20, 0, 15, gamePanel.tileSize); setDefaultValue(); getPlayerImage(); } public Player() { } public void setDefaultValue() { worldX = gamePanel.tileSize; worldY = gamePanel.tileSize * 7; maxHeight = (int) worldY; velY = 0; velX = 0; jumpVelocity = 50; speed = 3; direction = "idle"; } public void getPlayerImage() { //TODO: Get player image try { up = ImageIO.read(getClass().getResourceAsStream("/game/textures/idle.png")); left1 = ImageIO.read(getClass().getResourceAsStream("/game/textures/left1.png")); left2 = ImageIO.read(getClass().getResourceAsStream("/game/textures/left2.png")); right1 = ImageIO.read(getClass().getResourceAsStream("/game/textures/right1.png")); right2 = ImageIO.read(getClass().getResourceAsStream("/game/textures/right2.png")); down = ImageIO.read(getClass().getResourceAsStream("/game/textures/down.png")); idle = ImageIO.read(getClass().getResourceAsStream("/game/textures/idle.png")); } catch (IOException e) { e.printStackTrace(); } } public void update() { if (keyManager.jumpPressed || keyManager.downPressed || keyManager.leftPressed || keyManager.rightPressed) { velX = 3; velY = 2; if (keyManager.jumpPressed && isOnPlatform()) { worldY-=velY; } if (keyManager.downPressed) { direction = "down"; } if (keyManager.leftPressed) { direction = "left"; } if (keyManager.rightPressed) { direction = "right"; } }else { velX = 0; } //Check collision collisionOn = false; gamePanel.collisionManager.checkTile(this); if (!collisionOn) { switch (direction) { case "left": worldX -= velX; break; case "right": worldX += velX; break; case "down": worldY += speed; break; } } // Animation changer spriteCounter++; if (spriteCounter > 15) { spriteNumber = (spriteNumber == 1) ? 2 : 1; spriteCounter = 0; } } public void draw(Graphics2D g2) { //g2.setColor(Color.WHITE); //g2.fillRect(x, y, gamePanel.tileSize, gamePanel.tileSize); BufferedImage image = null; switch (direction) { case "space": image = idle; break; case "down": image = down; break; case "left": if (spriteNumber == 1) image = left1; if (spriteNumber == 2) image = left2; break; case "right": if (spriteNumber == 1) image = right1; if (spriteNumber == 2) image = right2; break; case "idle": image = idle; } g2.drawImage(image, screenX, screenY, gamePanel.tileSize, gamePanel.tileSize, null); } void jump() { if (!jumping) { jumping = true; gravity -= 0.1; setVelY(-gravity); worldY -= gravity; System.out.println(jumping); } if (gravity 0 ) { worldY--; jumpVelocity--; } [/code] Если кто-нибудь сможет помочь, буду признателен. Подробнее здесь: [url]https://stackoverflow.com/questions/78334943/how-can-i-make-my-character-jump-in-a-2d-games-with-java[/url]
Как заставить черепаху прыгать в игре?
Anonymous »
29 дек 2023, 21:48 » в форуме
Python
Я создал код, позволяющий моему игровому персонажу прыгать. Я хочу ввести эту функцию прыжка в свою игру.
Чтобы код не был ограничен определенной координатой, я определил o как переменную для хранения исходной координаты y перед переходом. В моей...
0 Ответы
29 Просмотры
Последнее сообщение Anonymous
29 дек 2023, 21:48
0 Ответы
27 Просмотры
Последнее сообщение Anonymous
05 фев 2025, 02:14
0 Ответы
50 Просмотры
Последнее сообщение Anonymous
09 дек 2024, 18:44
Обработка ввода Unicode в играх
Гость »
14 мар 2024, 07:34 » в форуме
C++
У меня есть игра, которая требует от меня разрешить игрокам общаться друг с другом через сеть. Все хорошо, кроме той части, где игроки могут вводить данные в Юникоде.
Итак, вопрос можно разделить на две части:
Когда игроки печатают, как мне...
0 Ответы
20 Просмотры
Последнее сообщение Гость
14 мар 2024, 07:34
0 Ответы
23 Просмотры
Последнее сообщение Anonymous
09 апр 2024, 21:35