adsense



[2011.11.29]java 게임(요시카 스크램블)에 아이템 추가하기

※도메인 이전 관계로 일부 글을 과거 블로그에서 이전해 왔습니다.

아이템을 추가하기 위해서 수정해야 하는 함수는

public void Init_GAME() <- 아이템으로 쓸 그림을 추가
public void Draw_ITEM() <- 추가 아이템 그림 그리는 부분을 추가
public void process_BULLET() <- 아이템을 생성할 때 추가 아이템을 포함할 수 있도록 수정
public void process_ITEM() <- 아이템을 먹었을 때 발생하는 효과를 처리

이렇게 4개의 함수 내용을 수정하게 됩니다.


1. 아이템으로 쓸 그림 & 추가아이템을 그려주는 부분을 추가하기

우선
class GameScreen extends Canvas
의 변수 선언 부분에서
Image item[]=new Image[3];//아이템
부분을 찾아, 아이템을 추가할 만큼 수정합니다.

예)아이템을 5종류 등장시킨다면
Image item[]=new Image[5];//아이템
와 같이 수정.

만일 하나만 추가할 거라면 수정하지 않아도 됩니다.


기존의 아이템으로 사용되던 그림은 item0.png와 item1.png입니다.


위 두 그림의 공통점은

- 해상도가 252*36

- 연속되는 애니메이션 컷 7컷을 가로로 나열

이 두 가지입니다.
만약 추가할 아이템 그림이 위와 같은 규격으로 만들어진다면, Draw_ITEM()의 내용은 수정할 필요가 없습니다.

아이템으로 쓸 그림의 이름은 item2.png로 가정하고, rsc/game 폴더에 넣습니다.

우선 Init_GAME()에

gamescreen.item[2]=makeImage("./rsc/game/item2.png");

를 추가합니다.


만일 다른 아이템 그림과 크기나 애니메이션 컷 수가 다르다면 Draw_ITEM()의 내용을 다음과 같이 수정합니다.

 public void Draw_ITEM(){
  int i;
  Item buff;
  for(i=0;i<main.items.size();i++){
   buff=(Item)(main.items.elementAt(i));
   switch(buff.kind){
   case 0:
   case 1:
    drawImageAnc(item[buff.kind], buff.dis.x, buff.dis.y, ((main.cnt/4)%7)*36,0, 36,36, 4);
    break;
   case 2:
    drawImageAnc(item[2], buff.dis.x, buff.dis.y, ((main.cnt/4)%cut)*width,0, width,height, 4);
    break;
  }
 }

위 내용을 그대로 입력하면 안되고
 drawImageAnc(item[2], buff.dis.x, buff.dis.y, ((main.cnt/4)%cut)*width,0, width,height, 4);
이 라인에서

cut은 가로 방향으로 애니메이션의 컷 수입니다. 만일 4컷이라면 4를 넣어줍니다.
width는 그림의 1컷의 가로 크기입니다.
height는 그림의 세로 크기입니다.

추가한 그림의 가로 세로 크기에 맞춰 수정해 넣어주면 됩니다.
예를 들어 48*48 그림이 가로로 두 장 들어가 있다면
 drawImageAnc(item[2], buff.dis.x, buff.dis.y, ((main.cnt/4)%2)*48,0, 48,48, 4);
이렇게 입력합니다.


2. 적을 파괴했을 때, 새로 추가된 아이템이 등장할 수 있도록 처리

아이템을 생성하는 부분은
 Item tem=new Item(ebuff.pos.x, buff.pos.y, RAND(1,(level+1)*20)/((level+1)*20));//난수 결과가 최대값일 때만 생성되는 아이템이 1이 된다
라인입니다.
RAND가 있는 부분에 0~2 사이의 값을 대입해주면 되며, 0은 점수 아이템(502대 마크), 1은 실드 아이템, 2가 새로 추가하는아이템이 됩니다.

원래의 라인은 0 또는 1만 생성되므로, 저 라인은 주석 처리하고

 int itemKind=RAND(1,100);
 if(itemKind<70)
  Item tem=new Item(ebuff.pos.x, buff.pos.y, 0);
 else if(itemKind<97)
  Item tem=new Item(ebuff.pos.x, buff.pos.y, 2);
 else
  Item tem=new Item(ebuff.pos.x, buff.pos.y, 1);
 위와 같이 해 주면, 70% 확률로 0번 아이템
 97-70=27% 확률로 2번 아이템 <- 여기서 새로 추가한 아이템이 생성됩니다.
 3% 확률로 실드 아이템이 생성됩니다.

현재 난이도(레벨)에 따라서 아이템이 생성될 확률을 바꿔주려면 level 값을 참고해서 난수나 비교값의 폭을 조절하면 됩니다.


3. 아이템을 먹었을 때 발생하는 효과를 처리

process_ITEM()에서
 switch(buff.kind){
 case 0://일반 득점
  score+=100;
  break;
 case 1://실드
  myshield=5;
  break;
 }
이 부분이 아이템 획득 시의 처리입니다.
그러므로
 case 2://새로운 아이템
항목을 추가하면 쉽게 새로운 아이템의 습득 효과를 줄 수 있습니다.

예1)새로운 아이템을 먹으면 1천점 득점

 switch(buff.kind){
 case 0://일반 득점
  score+=100;
  break;
 case 1://실드
  myshield=5;
  break;
 case 2://새로운 아이템
  score+=1000;
  break;
 }

예2)새로운 아이템을 먹으면 화면상의 적 전멸

 switch(buff.kind){
 case 0://일반 득점
  score+=100;
  break;
 case 1://실드
  myshield=5;
  break;
 case 2://새로운 아이템
  for(int j=0;j<enemies.size();j++){
   enemies.remove(j);//적 캐릭터 소거
   expl=new Effect(0, ebuff.pos.x, buff.pos.y, 0);
   effects.add(expl);//폭발 이펙트 추가
  }
  break;
 }




덧글

댓글 입력 영역


Books

Geek라이프

메가 드라이브 퍼펙트 카탈로그
마에다 히로유키 저/조기현 역

미소녀 일러스트 테크닉
B-은하, pen스케, 카와이 저/정유진 역

핵심강좌! Cocos2d-x
이재환 저

피규어의 교과서 레진 키트 & 도색 입문 편
후지타 시게토시 저/김정규 역
예스24 | 애드온2
일본서적 전문사이트 NEPIC