티스토리 뷰

Game/Source

[Class] Sprite 기본

유승구 2011. 12. 23. 16:31
[2011.12.23]
디자인 패턴 보면서 여러가지 시도를 해봤는데 아직도 결론이 안났다.
Output이 안나오길래 일단은 Output을 좀 내보기로 결정했다! 

아직 개념들이 많이 안서서 그런가 Tile base를 하게 되면 Array를 자꾸 연관지어 생각하게 되었다. 이 생각에서 영역을 확장시켜 나가다보니 결국 원 소스로 돌아와버렸다.

먼저 결론은 이렇다.

"부모의 변수를 자꾸만 상속 받는 괴상한 클래스는 좋지 않다."
부모를 상속받으면 끝일 내용들을 클래스로 담고 이를 상속받았더니 나중에 그 부모 클래스가 기억이 안나니까 나도 모르게 "이런!" 을 외쳐버렸다. 디자인 패턴 조차 부모 클래스의 분석까지 필요한 클래스 설계는 좋지 않다고 한다.

MVC방식을 사용해야 관리가 편하니까 이런 저런 생각 끝에 가장 필요로 하는 부분만 간추렸다.

[1. 변수 선언]


오브젝트의 위치 : posX, posY
오브젝트 크기 : ObjectRect, scaleX, scaleY
오브젝트의 속도 : speed
오브젝트 상태 : state

변수의 접근 권한에 대해서는 public으로 처리 했다. (지금 과정에선 복잡한 것을 배제 하기로 함)

[2. 메소드들]


 생성자에서는 posX, posY를 오브젝트의 중심점으로 잡고 크기를 결정하게 된다.

public Sprite(int x, int y, int width, int height, int spritespeed) {
	posX = x;
	posY = y;
	scaleX = width;
	scaleY = height;
	speed = spritespeed;
		
	int halfWidth = (scaleX/2);
	int halfHeight = (scaleY/2);
		
	objRect = new Rect(x-halfWidth, y-halfHeight, x+halfWidth, y+halfHeight);
}

이러면  생성자에서는 Sprite 정보를 가지게 된다.


public boolean isBounding(int x, int y) {
	return objRect.contains(x, y);
}

충돌 체크를 위한 bounding 함수도 제작한다. 이렇게만 하고 나중에 필요한 부분은 더 추가하도록 한다.

[3. 전체 소스]




public class Sprite {
	
	public int posX;
	public int posY;
	
	public int scaleX;
	public int scaleY;
	
	public Rect objRect;
	public int speed;
	
	public int State;
	
	public Sprite(int x, int y, int width, int height, int spritespeed) {
		posX = x;
		posY = y;
		scaleX = width;
		scaleY = height;
		speed = spritespeed;
		
		int halfWidth = (scaleX/2);
		int halfHeight = (scaleY/2);
		
		objRect = new Rect(x-halfWidth, y-halfHeight, x+halfWidth, y+halfHeight);
	}
	
	public boolean isBounding(int x, int y) {
		return objRect.contains(x, y);
	}
}

'Game > Source' 카테고리의 다른 글

[Class] Sprite 기본  (0) 2011.12.23
[기억력게임] 1. 구조 설계 및 Index 화면 제작  (0) 2011.06.22
댓글
댓글쓰기 폼