지금 코드는 BubbleFrame 이 주체가 되어서 방울이 만들어 지고 있다.
하지만 행위의 주체는 Player 가 되는게 옳다. (플레이어가 방울을 만들어 공격하기 때문에)
버블 프레임의 코드를 주석 처리 해준다.
case KeyEvent.VK_SPACE:
//Bubble bubble = new Bubble(mContext);
//add(bubble);
break;
}
Moveable 인터페이스에 attack 메서드를 추가해준다.
이때 디폴트로 만든 이유는 bubble 은 어택하지않고, 플레이어가 어택을 하기 때문
public interface Moveable {
public abstract void left();
public abstract void right();
public abstract void up();
default public void down() {};
default public void attack() {};
}
Player 클래스로 가서 플레이어가
attack
메서드를 통해 bubble 을 생성하도록 변경한다.이때도 BubbleFrame를 가져와야 하기 때문에 생성자 주입을 하도록 코드를 수정한다.
private BubbleFrame mContext;
public Player(BubbleFrame mContext) {
this.mContext = mContext;
initObject();
initSetting();
initBackgroundPlayerService();
}
@Override
public void attack() {
Bubble bubble = new Bubble(mContext);
if(playerDirection == playerDirection.LEFT) {
bubble.left();
}else {
bubble.right();
}
}
그리고 처음에 주석 처리했던 BubbleFrame 의 Space를 수정한다.
이 코드를 통해 물방울이 BubbleFrame 이 주체가 되어 생성하지 않고, 플레이어가 생성할 수 있도록 할 수 있다.
case KeyEvent.VK_SPACE:
player.attack();
break;
}
❗ 이렇게 실행하니 프로그램이 제대로 실행되지 않음 ❗
현상 : 스페이스를 누를 때 마다 굉장히 버벅이며 프로그램 종료가 되지 않는다.
Bubble 클래스의 initThread 에서 left, right 메서드를 호출하는데 attack 에서 호출하니 스레드가 충돌하는 모양이다…
스레드가 생성되는 위치가 변경되어야 한다.
private void initThread() {
new Thread(()-> {
System.out.println("스레드 실행 시작");
if(player.getPlayerDirection()==PlayerDirection.LEFT) {
left();
}else {
right();
}
System.out.println("스레드 실행 완료");
}) .start();
}
위의 코드는 지우고 attack 메서드가 실행될 때 스레드가 만들어지도록 변경하였다.
@Override
public void attack() {
new Thread(()->{
Bubble bubble = new Bubble(mContext);
if(playerDirection == playerDirection.LEFT) {
bubble.left();
}else {
bubble.right();
}
}).start();
}
❗캐릭터는 문제없이 움직이지만 방울이 나오지 않는다.❗
콘솔 로그를 확인하니 호출하는 부분은
문제없이 작동되었다
mContext.add(bubble);
화면에 표시되는 코드가 없어서… 안나왔던것
방울 시작 방울 시작 방울 왼쪽 방울 종료 방울 오른쪽 방울 종료
코드는 정상적으로 작동하더라도 화면에 표시가 되는 것은 BubbleFrame이 수행하기 때문에
add 를 명시해 주지 않으면 화면에 나타나지 않는다(체크하기)
- 게임 맵과 캐릭터 추가 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
- 리팩토링 하기
- 적군 만들기
Share article