0

AwesomeMousePointerマウスでアニメーションの再生を開始する機能を持つクラスがあります。

class AwesomeMousePointer{
void startAnimat();
void stopAnimat();
};

マウスアニメーションを開始するかどうかを判断する責任を負った別のオブジェクトがあります(これは、オブジェクトの内部ヒットテストに基づいています。たとえば、マウスが特定の時間オブジェクト内にある場合)

class SomeShape(){
Event<MouseArgs> startAnim
Event<bool> interrutptAnim
bool hitTest(int x, int y);

//Inside some loop function, check if the mouse is inside the object
if(hitTest(mouseXPos, mouseYPos)){
//if the mouse if inside for x time
NotiftyEvent(startAnim, MouseArgs);
}
else{
//mouse left the object
NotifyEvent(interruptAnim, false);
}

ここで、再び my 内にAwesomeMousePointer、イベントのリスナーを追加します。

AddListener(SomeShape::startAnim, &AwesomeMousePointer::startAnim);
AddListener(SomeShape::interruptAnim, &AweseommousePointer::interruptAnim);

私が試した短い別の例では、シングルイベントシステムを使用NotifyEventして正しく動作しています。AddListener私のこのアプリケーション内には、 と のオブジェクトがたくさんありSomeShapeますAwesomeMousePointer。私の質問は、アニメーションの上記のロジックが機能するかどうか、またはSomeShapeオブジェクトを明示的に渡してイベントをサブスクライブする必要があるかどうかです。その場合、物事は少し難しくなります。

例:

AddListener(shapeObject1.startAnim, &AwesomeMousePointer::startAnimat);
AddListener(shapeObject2.startAnim, &AwesomeMousePointer::startAnimat);
AddListener(shapeObject3.startAnim, &AwesomeMousePointer::startAnimat);

また

AddListener(SomeShape::startAnim, &AwesomeMousePointer::startAnimat);

上記の2番目のものはうまくいきますか?そうでない場合、オブジェクトを明示的に渡さずにどのようにそれを行うのでしょうShapeObjectsMousePointer

内部のイベントSomeShapeを静的にすると、これは機能しますか?

static Event<MouseArgs> startAnim
static Event<bool> interrutptAnim
4

1 に答える 1

0

あなたは、送信者とターゲットの間の結合を望んでいないと言います。この場合、Poco イベントの使用は適切ではありません。http://pocoproject.org/slides/090-NotificationsEvents.pdfによると、送信者とターゲットがお互いを知る必要がないため、イベントの代わりに通知を使用する必要があります。

于 2013-01-15T09:09:58.183 に答える