一直在尝试通过各种布局/零点和其他方法转换乐趣,试图让我的背景图像完美地适合我的框架,而没有令人讨厌的空白,我迄今还未能清楚。每一次尝试都会导致更大的差距。如果布局设置为左侧,则图像不可避免地会填满左侧的空白,但会扩大右侧的空白,最后一次尝试通过将图像添加到框架直接填充它,但导致屏幕上的其他元素不再接收重绘调用Java框架和图像之间的背景差距
在我的游戏设置了一个JFrame的那一刻,创建其扩展JPanel我的游戏系统类,以及游戏系统类创建其处理要么开始屏幕或实际游戏画面元素内部类。在由系统创建的游戏容器类中,背景被绘制。
缩短按下码提取
主类:
public class Test extends JPanel {
////////////////
////Variables //
////////////////////////////
/**/private static Test test;
/**/private static JFrame stage;
/**/private static Container CurrentMenu;
/**/private boolean isRunning = true; //used to state whether game is running
////////////////////////////////////
////////////////
// initialize //
////////////////
/**/public static void main(String[] args) {
/**/stage = new JFrame("Touhou FBE");//creates game window
/**/stage.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//sets up default handler for closing window
/**/test = new Test();//creates an object of our game
/**/stage.getContentPane().add(test);//add game object to frame
/**/stage.pack();
/**/stage.setVisible(true);//sets frame to visible
/**/stage.setResizable(false);
/**/test.Game_loop();
/**/}
////////////////////////////
/////////////////
// constructor //
/////////////////
/**/public Test(){
/**////////////////////////////////
/**/// create starting game menu //
/**//////////////////////////////// //////////////////
/**/CurrentMenu = new Container(this,stage); // swap GameMenu with GameContainer to be able to see difference with painting
/**/this.add(CurrentMenu); //////////////////
/**/}
///////////////////////
////////////////////////////////////////////
// Game loop which manages object updates //
////////////////////////////////////////////
/**/public void Game_loop(){
/**/while (isRunning) {
/**/test.repaint();
/**/}
/**/}
/////////////////////////////////////////////////
/////////////////////////////////
// Rendering canvas for images //
/////////////////////////////////
/**/public void paint(Graphics g) {
/**/super.paint(g); //Refresh Panel
/**/}
///////////////////////////////////////////////////////
容器类:
//////////////////////////
// game container class //
//////////////////////////
/**/public class Container extends JPanel{
/**/
///////////////
//Variables //
///////////////
/**/public Test Game;
/**/public JFrame stage;
/**/private Image img;
////////////////
//Constructor //
////////////////
/**/public Container(Test game, JFrame Stage){
/**/Game = game;
/**/stage = Stage;
/**/img = (new ImageIcon("resources/background.png").getImage());
/**/Dimension size = new Dimension(700, 400);
/**/setPreferredSize(size);
/**/setMinimumSize(size);
/**/setMaximumSize(size);
/**/setLayout(null);
/**/setSize(size);
/**/}
/**/
////////////////////////////
//////////////////
//Paint sprite //
//////////////////
/**/public void paintComponent(Graphics g) {
/**///super.paint(g);
/**/g.drawImage(img, 0,0, this);
/**/}
////////////////////////////////////
}
在方案和实施例中使用的图像(重命名为背景) http://img716.imageshack.us/img716/6410/seq6.png
目前我已经达到了如果必须的时候,我会留下差距,因为它不会影响整个游戏,但是它让我感到非常糟糕,并且每次尝试交换布局,消除hgap/vgap ,迫使图像的位置或后续教程导致没有真正的变化。帮助将不胜感激,并有助于确保我再也不会遇到这样的问题。
1)为了更好地帮助越早,张贴[SSCCE](http://sscce.org/)。 2)获取图像的一种方法是通过热链接到[本答案](http://stackoverflow.com/a/19209651/418556)中看到的图像。 –
我喜欢你用////和/ **/ –
组织你的代码的方式我推测这两个类组成了一个SSCCE,因为它实际上是受影响的代码的裸骨,还要学习如何做出更有效的SSCCE。此外,我猜想与图像,这将有助于如果我链接原始背景图像是你问。 – ulthanex