Java 애플릿에서 2D RPG 게임을 개발하려고합니다. 지금 나는 플레이어가 왼쪽, 오른쪽, 위, 아래로 움직일 수있는 간단한 타원형을 가지고 있으며, 애플릿의 테두리에 대한 충돌은 그들을 멈추게합니다. 문제는 플레이어가 움직일 수있는 거대한 세계 (2000x 2000x)를 만들고 싶습니다. 그러나 한 번에 화면의 600xx400x 만보기를 원합니다. 그들이 계속 오른쪽으로 움직인다면 나는 스크린을 따라 가야한다. 똑같은 것이 위, 아래, 왼쪽이다. 아무도 이걸하는 방법을 말해 줄 수 있습니까? 지금까지 내 코드는 다음과 같습니다.Java 애플릿 게임 2D 창 스크롤
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;
}
else if (x >= (getWidth() - radius) && dir.equals("R"))
{
System.out.println(getWidth());
x = prevX;
return true;
}
else if (y >= (getHeight() - radius) && dir.equals("D"))
{
y = prevY;
return true;
}
return false;
}
@Override
public void keyPressed(KeyEvent e)
{
switch (e.getKeyCode())
{
case KeyEvent.VK_RIGHT:
if (!CheckCollision("R"))
{
x += 4;
prevX = x;
}
break;
case KeyEvent.VK_LEFT:
if (!CheckCollision("L"))
{
x -= 4;
prevX = x;
}
break;
case KeyEvent.VK_UP:
if (!CheckCollision("U"))
{
y -= 4;
prevY = y;
}
break;
case KeyEvent.VK_DOWN:
if (!CheckCollision("D"))
{
y += 4;
prevY = y;
}
break;
}
}
@Override
public void keyReleased(KeyEvent arg0)
{
// TODO Auto-generated method stub
}
@Override
public void keyTyped(KeyEvent arg0)
{
// TODO Auto-generated method stub
}
}
을 당신은뿐만 아니라 보려면지도의 오프셋 (offset) 위치를 계산할 수 있지만, 그 요구에 내려 오는, 당신은 (아니, 심각) 가상 세계를 만들어야합니다 문자가 화면의 300x200에만있을 수도 있지만, 세계에서 1000x700 일 수 있습니다. 이것은 당신이 세계의 좌/우 구석이 어디에서 시작하는지 알 필요가 있고 그것을 "가상"좌표로 변환하기위한 검색 기능을 허용합니다. Easy : D – MadProgrammer
@MadProgrammer 저는 Java를 처음 접했고 여러분이 말하는 것을 어떻게 만들 수 있는지 이해할 수 없습니다. 원하는 크기로 크기를 설정할 수있는 코드가 있습니까?하지만 600x400과 같이 플레이어가 볼 수있는 크기를 설정할 수 있도록하고 플레이어가 오른쪽, 왼쪽, 위 또는 아래로 화면 x 또는 y를 따라 이동함에 따라? 즉, 코드를 알고 계십니까? 나는 정말로 나를 시작하게 할 무언가가 필요하다. –
세상을 어떻게 표현할 것인가에 대한 이야기가 많이 있습니다. 하나의 큰 비트 맵이나 일련의 타일입니까? – MadProgrammer