자동으로 움직이게 하기 위해서
BackGroundPlayerService
를 복사하여 사용할 것이다.전체 코드는 다음과 같다.
적이 왼쪽/ 오른쪽 벽에 충돌하였을 때 움직임을 오른쪽/ 왼쪽으로 변경 시킨다.
public class BackGroundEnemyService implements Runnable {
private BufferedImage image;
private Enemy enemy;
public BackGroundEnemyService(Enemy enemy) {
this.enemy = enemy;
try {
image = ImageIO.read(new File("image/backgroundMapservice.png"));
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
@Override
public void run() {
while(enemy.getState()==0) {
Color leftColor = new Color(image.getRGB(enemy.getX() - 10, enemy.getY()+ 25));
Color rightColor = new Color(image.getRGB(enemy.getX() + 50 + 15, enemy.getY()+25));
int bottomColor = image.getRGB(enemy.getX() + 25, enemy.getY()+50 + 5);
//바닥 충돌 확인
if(bottomColor != -1) {
//System.out.println("바닥에 충돌함");
enemy.setDown(false);
}else {
if(!enemy.isUp() && !enemy.isDown()) {
System.out.println("down");
enemy.down();
}
}
if(leftColor.getRed() == 255 && leftColor.getGreen()==0 && leftColor.getBlue()==0) {
//System.out.println("왼쪽 벽에 충돌함");
enemy.setLeft(false);
if(!enemy.isRight()) {
enemy.right();
}
}else if (rightColor.getRed() == 255 && rightColor.getGreen()==0 && rightColor.getBlue()==0) {
//System.out.println("오른쪽 벽에 충돌함");
enemy.setRight(false);
if(!enemy.isLeft()) {
enemy.left();
}
}
try {
Thread.sleep(10);
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
}
그리고 Enemy클래스에 쓰레드를 추가하여 실행하면 이렇게 움직인다.
private void initBackgroundEnemyService() {
new Thread(new BackGroundEnemyService(this)).start();
}

- 게임 맵과 캐릭터 추가 https://inblog.ai/hj/sts-버블버블-게임-맵과-캐릭터-추가하기-33126
- 스레드 사용하여 이동하기 https://inblog.ai/hj/sts-버블버블-스레드-사용이동-33335
- 외벽 충돌 시 캐릭터 정지 https://inblog.ai/hj/sts-버블버블-외벽-충돌-시-캐릭터-정지-36946
- 캐릭터 업 다운 시키기 https://inblog.ai/hj/sts-버블버블-캐릭터-업-다운-38143
- 물방울 생성하기(기본셋팅) https://inblog.ai/hj/sts-버블버블-물방울-기본-셋팅-38154
- 물방울 움직이게 하기 https://inblog.ai/hj/sts-버블버블-물방울-움직이게-하기-38195
- 물방울 메모리에서 해제 하고 화면 다시 그리기 https://inblog.ai/hj/sts-버블버블-물방울-완성하기-38589
- 물방울 공격하기 완료 https://inblog.ai/hj/sts-버블버블-물방울로-공격하기-40303
Share article