首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >StartMenu之后,JFrame中的Java应用程序卡住了

StartMenu之后,JFrame中的Java应用程序卡住了
EN

Stack Overflow用户
提问于 2015-02-23 03:57:14
回答 1查看 118关注 0票数 0

我已经制作了一个包含20+类的游戏,如果我在Eclipse中运行该应用程序,它可以完美地运行。

现在,如果我将游戏导出到一个可运行的jar中,当我试图启动游戏时,它就卡住了。但奇怪的是,我的介绍播放,我可以继续按“回车”到我的菜单,但如果我试图从那里开始游戏,菜单卡住了。(菜单的背景通常会移动)

所以,我有三个GameState,分别是introStatemenuStatelevel1State。这三个都是从GameState扩展而来的。introState和menuState可以完美地工作,但level1State并非如此。

我将把level1State中的代码和清单文件放在这里。Eclipse没有给我任何错误。

我的游戏确实有一个主类,并且显示的每个类都确实存在并工作。

有什么原因和如何解决的想法吗?或者在eclipse之外玩这个游戏的另一种方式?

打包GameState;

代码语言:javascript
复制
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);
    }
}

清单文件:

代码语言:javascript
复制
Manifest-Version: 1.0
Rsrc-Class-Path: ./
Class-Path: .
Rsrc-Main-Class: Main.Game
Main-Class: org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader
EN

回答 1

Stack Overflow用户

发布于 2015-03-18 03:23:25

DId您将其导出为可运行的JAR文件还是JAR文件?如果您还没有,请尝试这两种方法。我使用相同的引擎,它对我有效,但我将其导出为jar,它不能完全工作,而当我将其导出为可运行的JAR文件时,它可以工作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28662534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档