我已经制作了一个包含20+类的游戏,如果我在Eclipse中运行该应用程序,它可以完美地运行。
现在,如果我将游戏导出到一个可运行的jar中,当我试图启动游戏时,它就卡住了。但奇怪的是,我的介绍播放,我可以继续按“回车”到我的菜单,但如果我试图从那里开始游戏,菜单卡住了。(菜单的背景通常会移动)
所以,我有三个GameState,分别是introState,menuState和level1State。这三个都是从GameState扩展而来的。introState和menuState可以完美地工作,但level1State并非如此。
我将把level1State中的代码和清单文件放在这里。Eclipse没有给我任何错误。
我的游戏确实有一个主类,并且显示的每个类都确实存在并工作。
有什么原因和如何解决的想法吗?或者在eclipse之外玩这个游戏的另一种方式?
打包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发布于 2015-03-18 03:23:25
DId您将其导出为可运行的JAR文件还是JAR文件?如果您还没有,请尝试这两种方法。我使用相同的引擎,它对我有效,但我将其导出为jar,它不能完全工作,而当我将其导出为可运行的JAR文件时,它可以工作。
https://stackoverflow.com/questions/28662534
复制相似问题