2013年1月13日 星期日

[ Kinect ultra ] 抽象超人姿勢偵測類別剖析

在抽象超人姿勢偵測類別定義檔AbstractPowerPoseDetector.h內,宣告一個 HenshinDetector 型別的屬性m_henshinDetector,我們可以用這個屬性來得知鹹蛋超人變身情形,除了這個屬性外,最重要的是定義一個虛擬函式detect()以實現多形機制(polymorphism) ,多型是運用類別 間繼承的關係,使父類別函式可以當成子類別函式的通用型態。


抽象超人姿勢偵測類別定義檔AbstractPowerPoseDetector.h的程式列表:
#ifndef _ABSTRACT_POWER_POSE_DETECTOR_H_
#define _ABSTRACT_POWER_POSE_DETECTOR_H_
#include "common.h"
#include "AbstractPoseDetector.h"
#include "HenshinDetector.h"
class AbstractPowerPoseDetector : public AbstractPoseDetector
{
protected:
 HenshinDetector* m_henshinDetector;
public:
 AbstractPowerPoseDetector(HenshinDetector* henshinDetector);
 virtual ~AbstractPowerPoseDetector();
 virtual void detect();
};
#endif

在抽象超人姿勢偵測類別實作檔AbstractPowerPoseDetector.cpp內,我們可以看到在建構子AbstractPowerPoseDetector()函式中,儲存henshinDetector,並在detect()函式中使用,而且在使用getStage()函式來判斷是否已變身為鹹蛋超人,若是則返回,若不是則呼叫父類別
AbstractPoseDetector::detect()函式。


抽象超人姿勢偵測類別實作檔AbstractPowerPoseDetector.cpp的程式列表:
#include "AbstractPowerPoseDetector.h"
AbstractPowerPoseDetector::AbstractPowerPoseDetector(HenshinDetector* henshinDetector) :
AbstractPoseDetector(henshinDetector->getUserDetector())
{
 m_henshinDetector = henshinDetector;
}
AbstractPowerPoseDetector::~AbstractPowerPoseDetector()
{
}
void AbstractPowerPoseDetector::detect()
{
 if (m_henshinDetector->getStage() != HenshinDetector::STAGE_HENSHINED) {
  return;
 }

 AbstractPoseDetector::detect();
}

沒有留言:

張貼留言