所以我正在制作一个游戏,我有EnemyAI以及 ,player并且它们都扩展了JPanel。世界有一个null布局,所以我用来setBounds();“移动”(实际上我只是移动世界图像)entities(player和AI) 并正确放置它们。但是当我添加(看起来像是,我测试了可能的最小数字)5 时,它repaint()完全自行调用。这会导致玩家视觉上在原地行走。添加的实体越多,间隔就越快(即 5 个实体的调用repaint()比 500 个实体的调用慢得多)。
注意:window下面的类中只是一个JFrame.
主要类别:
public class Game(){
public static boolean fighting = false;
public static void startGame(){
WorldPanel game = new WorldPanel();
game.setPreferredSize(new Dimension(window.getWidth(), window.getHeight()));
PlayerPane player = new PlayerPane(32,32, "Player 1");
game.addKeyListener(new KeyListener(){
public void keyPressed(KeyEvent arg0) {
if(fighting == false){
move(player, game, arg0.isShiftDown(), arg0.getKeyCode());
} else {
System.out.println("Fighting …Run Code Online (Sandbox Code Playgroud) 目前,我使用随机数生成JPanel中的组件位置.我发现使用Random.nextInt(6000);返回太少的数字少于100,太多,我的意思是它们中的大多数都小于100.所以我调查了它,发现了一个更高质量的随机数发生器,Long所以我采用了自由地格式化它(参见下面的实现).之后我在1000-2000范围内获得了太多数字.
在使用计数器变量进行测试后,当我生成2000个数字时,其中大约1350个数字在该范围内.
我需要一个更随机的数字生成器,甚至是一个 真正随机的数字生成器(我不希望得到它,但如果我能得到它会很好).
随机类:
public class HighQualityRandom extends Random {
private static final long serialVersionUID = 1L;
private Lock l = new ReentrantLock();
private long u;
private long v = 4101842887655102017L;
private long w = 1;
public HighQualityRandom() {
this(System.nanoTime());
}
public HighQualityRandom(long seed) {
l.lock();
u = seed ^ v;
nextLong();
v = u;
nextLong();
w = v;
nextLong();
l.unlock();
}
public long nextLong() {
l.lock();
try {
u = u * …Run Code Online (Sandbox Code Playgroud)