배경
저는 취미로 게임 개발을하고 있으며, 더 나은 방법으로 게임을 디자인하고 있습니다. 현재 표준 OOP 접근 방식을 사용하고 있습니다 (8 년 동안 엔터프라이즈 개발을 해왔 기 때문에 실제로 적용됩니다). 예를 들어 "바디"
public class Baddie:AnimatedSprite //(or StaticSprite if needed, which inherit Sprite)
{
//sprite base will have things like what texture to use,
//what the current position is, the base Update/Draw/GetInput methods, etc..
//an AnimatedSprite contains helpers to animated the player while
//a StaticSprite is just one that will draw whatever texture is there
}
문제
2d 플랫 포머를 만들고 있는데 점프 할 수 있으려면 baddie가 필요합니다. 일반적으로 내가하는 일은 Update / GetInput 메소드에 적절한 코드를 추가하는 것입니다. 그런 다음 플레이어를 크롤링, 오리, 등산 등으로 만들어야하는 경우 코드가 이동합니다.
주의하지 않으면 해당 메소드가 복잡 해져서 이와 같은 메소드 쌍을 작성하게됩니다.
CheckForJumpAction(Input input)
과 DoJump()
CheckforDuckAction(Input input)
과 DoDuck()
따라서 GetInput은
public void DoInput(Input input)
{
CheckForJumpAction(input);
CheckForDuckAction(input);
}
업데이트는 다음과 같습니다
public void Update()
{
DoJump();
DoDuck();
}
나가서 플레이어가 뛰어 내려야하는 다른 게임을 만들면 보통 기능이있는 게임에 들어가서 복사합니다. 지저분하다. 그게 내가 더 좋은 것을 찾는 이유입니다.
해결책?
Blend에 요소에 첨부 할 수있는 동작이있는 방식이 정말 좋습니다. 내 게임에서 같은 개념을 사용하는 것에 대해 생각하고 있습니다. 동일한 예를 살펴 보겠습니다.
기본 동작 객체를 생성합니다
public class Behavior
{
public void Update()
Public void GetInput()
}
그리고 그것을 사용하여 행동을 만들 수 있습니다. JumpBehavior:Behavior
과DuckBehavior:Behavior
그런 다음 Sprite베이스에 동작 컬렉션을 추가하고 각 엔티티에 필요한 것을 추가 할 수 있습니다.
public class Baddie:AnimatedSprite
{
public Baddie()
{
this.behaviors = new Behavior[2];
this.behaviors[0] = new JumpBehavior();
//etc...
}
public void Update()
{
//behaviors.update
}
public GetInput()
{
//behaviors.getinput
}
}
많은 게임에서 Jump and Duck을 사용하고 싶을 경우, 그 동작을 그대로 적용 할 수 있습니다. 일반적인 라이브러리를 만들 수도 있습니다.
작동합니까?
내가 알 수없는 것은 그들 사이에 상태를 공유하는 방법입니다. 점프와 덕을 보면 둘 다 그려지는 텍스처의 현재 부분뿐만 아니라 플레이어의 상태에도 영향을줍니다. (점프는 시간이 지남에 따라 증가하는 양의 상향 힘을 가할 것이고 오리는 움직임을 멈추고 질감과 바디의 충돌 크기를 변경하려고합니다.
이걸 어떻게 묶어서 작동시킬 수 있습니까? 동작 사이에 종속성 속성을 만들어야합니까? 각 행동 에 부모에 대해 알고 직접 수정해야합니까? 내가 생각한 한 가지는 트리거 될 때 실행되도록 각 동작에 대리자를 전달할 수 있다는 것입니다.
나는 더 많은 문제를 찾고 있다고 확신하지만, 전체 목적은 게임과 동일한 게임의 엔티티 사이에서 이러한 동작을 쉽게 재사용 할 수 있도록하는 것입니다.
그래서 나는 그것을 당신에게 넘깁니다. 이것이 어떻게 / 가능한지를 설명 할 수 있습니까? 더 좋은 아이디어가 있습니까? 나는 모두 귀입니다.