0

我在这里问了一个问题Get mouse screen coordinates on click并得到了一个很好的答案(已确认),谢谢Gaurav Raj。在这个示例中:

bool MirrarOrnaments::onMouseDown(FB::MouseDownEvent *evt, FB::PluginWindow *) 
{
  if(evt->m_Btn == FB::MouseButtonEvent::MouseButton_Left) 
  {
    /** 
     * apiPtr is the pointer to FB::JSAPIPtr 
     * mousePositionCallback is the JSAPI function which takes variant list of mouse 
     * co-ordinates as argument 
     */ 
    apiPtr->invoke("mousePositionCallback", FB::variant_list_of(evt->m_x)(evt->m_y)); 
  }
}

据我所知,最后一个字符串必须mousePositionCallback在我的 JavaScript 中运行函数,参数为FB::variant_list; 但我无法理解 apiPtr 指针的用途,我在哪里可以得到它以及这个指针FB::JSAPIPtr必须如何在我的代码中实际查看。

4

1 回答 1

1

FireBreath 中的 FB::JSAPIPtr 类型只是 boost::shared_ptr 的方便别名(共享自动指针,因此您不必在对象上调用 delete,也不必担心它会消失)...

尝试添加 getRootJSAPI() 调用,这应该为您返回 apiPtr。

bool MirrarOrnaments::onMouseDown(FB::MouseDownEvent *evt, FB::PluginWindow *) 
{
  if(evt->m_Btn == FB::MouseButtonEvent::MouseButton_Left) 
  {
    /** 
     * apiPtr is the pointer to FB::JSAPIPtr 
     * mousePositionCallback is the JSAPI function which takes variant list of mouse 
     * co-ordinates as argument 
     */ 
    // if you want to access it from the API Part
    // FB::JSAPIPtr apiPtr(boost::make_shared<FBYourPluginAPI>(m_plugin));
    //add the next line:
    FB::JSAPIPtr apiPtr = m_plugin.lock()->getRootJSAPI();
    apiPtr->Invoke("mousePositionCallback", FB::variant_list_of(evt->m_x)(evt->m_y)); 
  }
}
于 2013-05-21T17:08:21.250 回答