それで、私の仲間はRenderingEngine
、グラフィックスが持っているメソッドをほとんど含んでいる場所を構築しました。そうすれば、RenderingEngines
クラスのメソッドを呼び出して、画面に何かをレンダリングするだけで済みます。不正行為の代わりに見たり学ぼうとしたりせずに、私の知識に基づいてそれを複製しようとしています. しかし、私は問題に遭遇しました。私のすべてのメソッドは、RenderingEngine クラスがゲーム クラスで初期化されるときに、JPanel のグラフィックを取得しようとした後、RenderingEngine クラスのグラフィック g が null になるということだけで機能します。これがどのように機能するかを理解していないかどうかはわかりませんが、説明が欲しいので、コードを下に置いてください。
以下のレンダリングクラス:
package game.Main;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Rectangle;
import java.awt.font.FontRenderContext;
import java.awt.geom.AffineTransform;
import java.awt.image.BufferedImage;
import javax.swing.JPanel;
public class RenderingEngine extends JPanel
{
private Graphics g;
public RenderingEngine()
{
g = this.getGraphics();
}
public void setColor(Color color)
{
g.setColor(color);
}
public void fillRect(Rectangle rect)
{
g.fillRect(rect.x, rect.y, rect.width, rect.height);
}
public void drawRect(Rectangle rect)
{
g.drawRect(rect.x, rect.y, rect.width, rect.height);
}
public void setStringFont(Font font)
{
g.setFont(font);
}
public void drawString(String string, int x, int y)
{
g.drawString(string, x, y);
}
public void drawImage(BufferedImage image, Rectangle rect)
{
g.drawImage(image, rect.x, rect.y, rect.width, rect.height, this);
}
public void clear(Rectangle rect)
{
g.clearRect(rect.x, rect.y, rect.width, rect.height);
}
public int widthofString(String string, Font font)
{
String text = string;
AffineTransform affinetransform = new AffineTransform();
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);
Font f1 = font;
int textwidth = (int)(font.getStringBounds(text, frc).getWidth());
return textwidth;
//int textheight = (int)(font.getStringBounds(text, frc).getHeight());
}
public int heightofString(String string, Font font)
{
String text = string;
AffineTransform affinetransform = new AffineTransform();
FontRenderContext frc = new FontRenderContext(affinetransform,true,true);
Font f1 = font;
//int textwidth = (int)(font.getStringBounds(text, frc).getWidth());
int textheight = (int)(font.getStringBounds(text, frc).getHeight());
return textheight;
}
public void paint()
{
}
}
ゲームクラスでレンダリングエンジンを初期化する場所:
private void Load()
{
frame = new JFrame();
frame.setSize(800,600);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setLocationRelativeTo(null);
frame.setResizable(false);
render = new RenderingEngine();
frame.add(render);
LoadContent();
gameloop = new GameLoop();
gameloop.Run();
}