public class ComEffectColor : ComEffectBase<Ref<Color>>
{
private readonly Color finalColor;
private Color originalColor;
public ComEffectColor(Ref<Color> effectTarget, Color finalColor, TimeSpan duration, TimeSpan startDelay)
: base(effectTarget, duration, startDelay)
{
this.finalColor = finalColor;
StartDelayEnded += ComEffectColorStartDelayEnded;
}
protected override void UpdateCustom()
{
if (elapsedTime < duration)
{
float progress = (float)(elapsedTime.TotalMilliseconds/duration.TotalMilliseconds);
effectTarget.Value = Color.Lerp(originalColor, finalColor, progress);
}
else
{
effectTarget.Value = finalColor;
InvokeFinished();
}
}
void ComEffectColorStartDelayEnded(object sender, EventArgs e)
{
originalColor = effectTarget.Value;
}
}
이 다양한 숫자 효과의 결과를 요약하기 것은 ComEffectColor의 생성자입니다 : IComEffect 클래스입니다. 이 함수는 다른 객체에 속할 수있는 색상 변수에 대한 포인터를 가져 와서 지정된 기간 동안 'targetColor'쪽으로 점진적으로 값을 변경합니다.하나의 변수
이러한 효과 클래스를 초기화 한 후에는 ComEffectManager 인스턴스에 추가되어 완료된 후에 업데이트 및 제거를 처리합니다.
내가 직면하는 문제는 동일한 색상 변수에 2 개 이상의 ComEffectColor를 혼합하는 방법입니다. 따라서 검정색 (0, 0, 0) 인 색상 변수로 시작하고 첫 번째 대상 색상이 (128, 128, 128)이고 다른 색상이 (0, 0, 0) 인 1 초 길이의 2 ComEffectColor를 추가하면, 0, 0), 1 초 후에 (64, 64, 64)로 끝나야합니다.
효과가 독립적이되기를 원하기 때문에 먼저 모든 색상 오프셋을 수집하고 '힘의 합'을 찾아 색상 변수에 적용하고 싶지 않습니다. 이것은 IComEffect의 다른 기능으로 인한 것이지만 매우 긴 게시물로 만들고 싶지 않습니다.
위의 예제에서 2 개가 계속 실행되는 동안 다른 효과를 추가 할 수 있습니다.
어떻게 할 수 있습니까?
위의 코드는 동시에 실행되는 다른 효과를 덮어 쓰는 단순한 구현입니다. 이것은 모든 종류의 모든 공통 루틴을 처리하는 ComEffectBase에서 상속받을 때 완전한 클래스가 아닙니다.
함수에 대한 모든 호출에 동일한 참조를 부여하면 효과가 독립적 일 수 없습니다. 각자의 상태에 따라 다른 기능들이 아마도 공통 값을 독립적으로 덮어 쓸 것입니다. 비록 그것에 대해 생각하면서도, 나는 당신이 당신의 함수에서 그 값의 사본 대신에 항상 참조 된 값을 사용한다면 당신이 어떻게 문제가 있을지를 보지 못한다. 우리는 약간의 코드를 볼 수 있을까요? – cyanic