안녕하세요

 

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

 

 

 

휴먼 클래스에는 슬라임 이미지(정확히는 이미지 아이콘)가 불붙은 모양으로 바뀌는 로직이 포함되어 있습니다. 그래서 원래의 이미지 아이콘을 저장할 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 + ".");

		}

	}

}

+ Recent posts