안녕하세요
이번시간에는 휴먼 클래스를 수정하여 게임이 정상적으로 실행되도록 만들어보겠습니다.

휴먼 클래스에는 슬라임 이미지(정확히는 이미지 아이콘)가 불붙은 모양으로 바뀌는 로직이 포함되어 있습니다. 그래서 원래의 이미지 아이콘을 저장할 original 변수를 선언해 두었습니다.

- 첫번째 네모 : 슬라임 객체에서 이미지 아이콘을 추출하여 오리지날 변수에 집어넣습니다. (슬라임 객체가 어느 것이냐에 따라서 블루슬라임 그림이 저장될 수도, 레드슬라임 그림이 저장될 수도 있습니다)
- 두번째 네모 : 불붙은 이미지 아이콘을 설정하는 코드입니다. 슬라임에 따라 설정됩니다.
- 세번째 네모 : 일정 시간 후에 원래의 이미지 아이콘으로 복귀합니다.

슬라임이 죽었을때 흑백으로 바꾸는 로직입니다.
- 1번 : getImage 메소드를 사용하여 이미지 아이콘을 이미지로 바꿔줍니다.
그리고 죽은 후에는 오리지날 이미지가 아니라 흑백 이미지로 바껴야 되기 때문에 타이머를 꺼줍니다.
- 2번 : 흑백으로 변경하는 핵심 로직입니다. colorImage에 들어있는 원본을 흑백으로 바꾸어 gImage에 집어 넣습니다.
- 3번 : 슬라임의 이미지 아이콘을 gImage로 설정합니다.

감사합니다.
// Human.java
package study;
import java.awt.Image;
import java.awt.Toolkit;
import java.awt.image.FilteredImageSource;
import java.awt.image.ImageFilter;
import java.awt.image.ImageProducer;
import java.util.Timer;
import java.util.TimerTask;
import javax.swing.GrayFilter;
import javax.swing.ImageIcon;
class Human {
String name;
int hp = 100;
ImageIcon original;
public Human(String n) {
name = n;
}
public void attack(Slime s) {
// * 원래 그림
original = (ImageIcon) s.getIcon();
// 슬라임이 당하는 그림.
ImageIcon bsImg_fire = new ImageIcon(Study01.class.getResource("/study/img/slime2(blue).png"));
ImageIcon rsImg_fire = new ImageIcon(Study01.class.getResource("/study/img/slime2(red).png"));
// * 슬라임에 따라 당하는 그림을 다르게 설정.
if (s == Study01.bs1) {
s.setIcon(bsImg_fire);
} else {
s.setIcon(rsImg_fire);
}
Timer timer1 = new Timer();
TimerTask task1 = new TimerTask() {
@Override
public void run() {
// * 일정 시간 후에 수행할 코드
s.setIcon(original);
}
};
timer1.schedule(task1, 500);
s.hp = s.hp - 30;
if (s.hp < 1) {
// * 이미지 아이콘에서 이미지를 추출.
Image colorImage = original.getImage();
timer1.cancel(); // 이 코드 생략시 죽은후에 49행 실행됨.
if (s == Study01.bs1) {
Study01.btn1.setEnabled(false);
} else {
Study01.btn2.setEnabled(false);
}
// 흑백으로 변경.
ImageFilter filter = new GrayFilter(true, 50);
ImageProducer producer = new FilteredImageSource(colorImage.getSource(), filter);
Image gImage = Toolkit.getDefaultToolkit().createImage(producer);
s.setIcon(new ImageIcon(gImage));
Study01.lbl.setText(s.name + "는 사망했다");
Study01.lbl2.setText("");
} else {
Study01.lbl.setText(name + "의 공격. " + s.name + "의 체력은 " + s.hp + ".");
}
}
}
'자바로 게임 만들기' 카테고리의 다른 글
[자바로 게임 만들기] 번외 04. 슬라임이라고 적고 라벨이라고 읽는다 (0) | 2020.12.11 |
---|---|
[자바로 게임 만들기] 번외 03. 죽은자는 보이지 않는다 (2) | 2020.12.08 |
답변 (0) | 2020.12.03 |
[자바로 게임 만들기] 번외 02. 프로젝트 내보내기와 불러오기 (0) | 2020.12.02 |
[자바로 게임 만들기] 번외 01. 슬라임이 피하는 모습 구현하기 (0) | 2020.12.01 |