我已经制作了一个包含20多个课程的游戏,如果我在Eclipse中运行该应用程序,它就完美无缺。
现在,如果我将游戏导出到一个可运行的jar中,当我尝试启动游戏时它就会卡住。但奇怪的是,我的介绍是播放,我可以继续按“输入”到我的菜单,但如果我尝试从那里开始游戏,菜单就会卡住。 (通常我菜单的背景移动)
所以,我有三个GameState
被称为introState
,menuState
和level1State
。这三个都来自GameState。 introState和menuState完美地工作,但是level1State没有。
我将把level1State和manifestfile中的代码放在这里。 Eclipse没有给我任何错误。
我的游戏确实有一个Main-class,每个显示的类确实存在并且有效。
有关导致此问题的原因和解决方法的任何想法?或者也许是另一种在日食之外玩这个游戏的方式?
包GameState;
import Main.GamePanel;
import TileMap.*;
import Entity.*;
import Entity.Enemies.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
package GameState;
import Main.GamePanel;
import TileMap.*;
import Entity.*;
import Entity.Enemies.*;
import java.awt.*;
import java.awt.event.KeyEvent;
import java.util.ArrayList;
public class Level1State extends GameState {
private TileMap tileMap;
private Background bg;
private Player player;
private ArrayList<Enemy> enemies;
private HUD hud;
public Level1State(GameStateManager gsm) {
this.gsm = gsm;
init();
}
public void init() {
tileMap = new TileMap(30);
tileMap.loadTiles("/Tilesets/darktheme.gif");
tileMap.loadMap("/Maps/level1-1.map");
tileMap.setPosition(0, 0);
tileMap.setTween(1);
bg = new Background("/Backgrounds/backgroundbg.gif", 0.1);
player = new Player(tileMap);
player.setPosition(100, 100);
populateEnemies();
hud = new HUD(player);
}
private void populateEnemies() {
enemies = new ArrayList<Enemy>();
Slugger s;
Point[] points = new Point[] {
new Point(860, 200),
new Point(1525, 200),
new Point(1680, 200),
new Point(1800, 200)
};
for(int i = 0; i < points.length; i++) {
s = new Slugger(tileMap);
s.setPosition(points[i].x, points[i].y);
enemies.add(s);
}
Spin s1;
Point[] point = new Point[]{
new Point(1990,100)
};
for(int k = 0; k < point.length; k ++){
s1 = new Spin(tileMap);
s1.setPosition(point[k].x, point[k].y);
enemies.add(s1);
//System.out.println(point[k].y);
}
}
public void update() {
// update player
player.update();
tileMap.setPosition(
GamePanel.WIDTH / 2 - player.getx(),
GamePanel.HEIGHT / 2 - player.gety()
);
// set background
bg.setPosition(tileMap.getx(), tileMap.gety());
// attack enemies
player.checkAttack(enemies);
// update all enemies
for(int i = 0; i < enemies.size(); i++) {
Enemy e = enemies.get(i);
e.update();
if(e.isDead()) {
enemies.remove(i);
i--;
}
}
}
public void draw(Graphics2D g) {
// draw bg
bg.draw(g);
// draw tilemap
tileMap.draw(g);
// draw player
player.draw(g);
// draw enemies
for(int i = 0; i < enemies.size(); i++) {
enemies.get(i).draw(g);
}
// draw hud
hud.draw(g);
}
public void keyPressed(int k) {
if(k == KeyEvent.VK_LEFT) player.setLeft(true);
if(k == KeyEvent.VK_RIGHT) player.setRight(true);
if(k == KeyEvent.VK_UP) player.setUp(true);
if(k == KeyEvent.VK_DOWN) player.setDown(true);
if(k == KeyEvent.VK_SPACE) player.setJumping(true);
if(k == KeyEvent.VK_E) player.setGliding(true);
if(k == KeyEvent.VK_A) player.setScratching();
if(k == KeyEvent.VK_F) player.setFiring();
}
public void keyReleased(int k) {
if(k == KeyEvent.VK_LEFT) player.setLeft(false);
if(k == KeyEvent.VK_RIGHT) player.setRight(false);
if(k == KeyEvent.VK_UP) player.setUp(false);
if(k == KeyEvent.VK_DOWN) player.setDown(false);
if(k == KeyEvent.VK_SPACE) player.setJumping(false);
if(k == KeyEvent.VK_E) player.setGliding(false);
}
}
清单文件:
Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: Main.Game
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
答案 0 :(得分:0)
您将它导出为可运行的JAR还是JAR文件?如果你还没有,请尝试两者。我使用相同的引擎,它适用于我,但我将它导出为一个它没有完全工作的jar,而当我将它作为一个可运行的JAR文件导出它确实有效。