我正在尝试用Java Applet开发2D RPG游戏。现在,我有一个简单的椭圆形,玩家可以使用向左,向右,向上和向下移动,并且与小程序边界的碰撞会阻止它们。问题是,我想创建一个玩家可以移动的巨大世界(2000像素乘2000x)。但是,我希望他们一次只能看到600px x 400x的屏幕。如果它们继续向右移动,我希望屏幕跟随它们,上下左右都一样。谁能告诉我该怎么做?到目前为止,这是我的代码:import java.awt.*;import java.awt.event.KeyEvent;import java.applet.Applet;import java.awt.event.KeyListener;import javax.swing.*;public class Main extends Applet implements Runnable, KeyListener{ private Image dbImage; private Graphics dbg; Thread t1; int x = 0; int y = 0; int prevX = x; int prevY = y; int radius = 40; boolean keyReleased = false; public void init() { setSize(600, 400); } public void start() { addKeyListener(this); t1 = new Thread(this); t1.start(); } public void destroy() { } public void stop() { } public void paint(Graphics g) { //player g.setColor(Color.RED); g.fillOval(x, y, radius, radius); } public void update(Graphics g) { dbImage = createImage (this.getSize().width, this.getSize().height); dbg = dbImage.getGraphics(); // initialize buffer if (dbImage == null) { } // clear screen in background dbg.setColor(getBackground()); dbg.fillRect(0, 0, this.getSize().width, this.getSize().height); // draw elements in background dbg.setColor(getForeground()); paint(dbg); // draw image on the screen g.drawImage(dbImage, 0, 0, this); } @Override public void run() { while (true) { //x++; repaint(); try { t1.sleep(17); } catch (Exception e) { } } } public boolean CheckCollision(String dir) { if (x <= 0 && dir.equals("L")) { x = prevX; return true; } else if (y <= 0 && dir.equals("U")) { y = prevY; return true; }
3 回答
12345678_0001
TA贡献1802条经验 获得超5个赞
这就是我在引擎中所做的事情。
我将保留两个变量OffSetX,OffSetY
并计算它们的每一步,以使玩家居中。
OffSetX = 0;
OffSetY = 0;
if (MAP_WIDTH > WINDOW_WIDTH) {
OffSetX = Math.round(WINDOW_WIDTH / 2 - obj.getX() - TILE_SIZE);
OffSetX = Math.min(OffSetX, 0);
OffSetX = Math.max(OffSetX, WINDOW_WIDTH - MAP_WIDTH);
}
if (MAP_HEIGHT > WINDOW_HEIGHT) {
OffSetY = Math.round(WINDOW_HEIGHT / 2 - obj.getY() - TILE_SIZE);
OffSetY = Math.min(OffSetY, 0);
OffSetY = Math.max(OffSetY, WINDOW_HEIGHT - MAP_HEIGHT);
}
然后在该位置绘制地图,(OffSetX, OffSetY)即仅将这些添加到要绘制的对象的原始位置。
您可能要跳过不可见的渲染对象。
添加回答
举报
0/150
提交
取消