首先,對不起我的英語!
我有一個問題,我正在嘗試制作一個簡單的 java 視頻游戲,并為輸入制作布林值。輸入效果很好,但是當我嘗試更新另一個類中的布林值時,它不起作用。
我把重要的課程放在這里
我把所有的課程都放在了這個驅動器中。 課程
package Launcher;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class KeyHandler implements KeyListener {
public boolean upPressed, downPressed, leftPressed, rightPressed;
@Override
public void keyTyped(KeyEvent e) {
}
@Override
public void keyPressed(KeyEvent e) {
int code = e.getKeyCode();
if(code == KeyEvent.VK_W){
upPressed = true;
System.out.println(upPressed);
}
if(code == KeyEvent.VK_S){
downPressed = false;
}
if(code == KeyEvent.VK_A){
leftPressed = true;
}
if(code == KeyEvent.VK_D){
rightPressed = true;
}
}
@Override
public void keyReleased(KeyEvent e) {
int code = e.getKeyCode();
if(code == KeyEvent.VK_W){
upPressed = false;
}
if(code == KeyEvent.VK_S){
downPressed = false;
}
if(code == KeyEvent.VK_A){
leftPressed = false;
}
if(code == KeyEvent.VK_D){
rightPressed = false;
}
}
}
package Launcher;
import java.awt.*;
import java.awt.event.KeyListener;
import javax.swing.JPanel;
public class GamePanel extends JPanel implements Runnable{
//Window settings variables
KeyHandler KH = new KeyHandler();
final int originalTileSize = 16; //16x16px
final int scale = 3;
final int tileSize = originalTileSize * scale; //48x48px
final int maxScreenCol = 16; //Tiles in a column
final int maxScreenRow = 12; //Tiles in a row
final int maxScreenWidth = tileSize * maxScreenCol;
final int maxScreenHeight = tileSize * maxScreenRow;
Thread gameThread;
//Player pos
int playerX = 100;
int playerY = 100;
int playerSpeed = 4;
public GamePanel(){
//Window Settings with variable implementation
this.setPreferredSize(new Dimension(maxScreenWidth, maxScreenHeight));
this.setBackground(Color.black);
this.setDoubleBuffered(true);
this.addKeyListener(KH);
this.setFocusable(true);
}
public void startGameThread(){
gameThread = new Thread(this);
gameThread.start();
}
public void update(){
//System.out.println(playerY);
boolean upP = KH.upPressed;
//System.out.println(upP);
if(upP){
System.out.println("Updating");
playerY -= playerSpeed;
}
else if(KH.downPressed == true){
playerY = playerSpeed;
}
else if(KH.leftPressed == true){
playerX -= playerSpeed;
}
else if(KH.rightPressed){
playerX = playerSpeed;
}
}
public void run(){
while(gameThread != null){
//System.out.println("Running game");
//1.Update
update();
//2Draw screen info
repaint();
}
}
我只希望更新函式獲取布爾變數,以便我能夠移動我的角色。太感謝了!
uj5u.com熱心網友回復:
我查看了其他類,原因在上面的代碼之外,它在 Launcher.Main 類中:
public static void main(String[] args){
WindowPanel WP = new WindowPanel();
WP.windowPanel();
GamePanel GP = new GamePanel();
GP.startGameThread();
}
在這里,您創建一個類 WindowPanel 的新實體,該實體本身 - 創建另一個GamePanel 實體。
public void windowPanel(){
// ...
GamePanel gamePanel = new GamePanel();
window.add(gamePanel);
window.pack();
// ...
}
因此,在創建 WindowPanel 之后,您在 Main 中創建的 GamePanel 與您之后創建并開始執行緒化的 GamePanel 無關。
使固定:
- 從 Main 類中洗掉額外的 GamePanel
- 添加到 WindowPanel 類中 windowPanel() 方法的末尾:
gamePanel.startGameThread();
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/529742.html
標籤:爪哇智能理念布尔值
上一篇:IntellijIDEAJava未找到以下網址的網頁:http://localhost:8090
下一篇:為什么kotlin/nativehelloworld在AppleM1上的IntelliJIDEA內不輸出任何內容?
