本文整理汇总了C++中Touch::getLocationInView方法的典型用法代码示例。如果您正苦于以下问题:C++ Touch::getLocationInView方法的具体用法?C++ Touch::getLocationInView怎么用?C++ Touch::getLocationInView使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Touch
的用法示例。
在下文中一共展示了Touch::getLocationInView方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: handleTouchesBegin
void GLView::handleTouchesBegin(int num, intptr_t ids[], float xs[], float ys[])
{
intptr_t id = 0;
float x = 0.0f;
float y = 0.0f;
int unusedIndex = 0;
EventTouch touchEvent;
for (int i = 0; i < num; ++i)
{
id = ids[i];
x = xs[i];
y = ys[i];
auto iter = g_touchIdReorderMap.find(id);
// it is a new touch
if (iter == g_touchIdReorderMap.end())
{
unusedIndex = getUnUsedIndex();
// The touches is more than MAX_TOUCHES ?
if (unusedIndex == -1) {
CCLOG("The touches is more than MAX_TOUCHES, unusedIndex = %d", unusedIndex);
continue;
}
Touch* touch = g_touches[unusedIndex] = new (std::nothrow) Touch();
touch->setTouchInfo(unusedIndex, (x - _viewPortRect.origin.x) / _scaleX,
(y - _viewPortRect.origin.y) / _scaleY);
CCLOGINFO("x = %f y = %f", touch->getLocationInView().x, touch->getLocationInView().y);
g_touchIdReorderMap.insert(std::make_pair(id, unusedIndex));
touchEvent._touches.push_back(touch);
}
}
if (touchEvent._touches.size() == 0)
{
CCLOG("touchesBegan: size = 0");
return;
}
touchEvent._eventCode = EventTouch::EventCode::BEGAN;
auto dispatcher = Director::getInstance()->getEventDispatcher();
dispatcher->dispatchEvent(&touchEvent);
}
示例2: onTouchesBegan
// check if the touch was on one of the flipper buttons
void PinballRUBELayer::onTouchesBegan(const std::vector<Touch *> &touches, cocos2d::Event *event)
{
// Calling the superclass handles the mouse joint dragging for the launcher,
// but it also allows the user to grab the ball, and zoom and pan the scene.
// For a real application you would want to implement a better method here.
// RUBELayer::onTouchesBegan(touches, event);
for (auto it = touches.begin(); it != touches.end(); ++it)
{
Touch* touch = (Touch*)*it;
Point screenPos = touch->getLocationInView();
b2Vec2 worldPos = screenToWorld(screenPos);
CCLOG("Touch began at x: %f y: %f", screenPos.x, screenPos.y);
// Make a small box around the touched point to query for overlapping fixtures
b2AABB aabb;
b2Vec2 d(0.001f, 0.001f);
aabb.lowerBound = worldPos - d;
aabb.upperBound = worldPos + d;
// Query the world for overlapping fixtures (the TouchDownQueryCallback simply
// looks for any fixture that contains the touched point)
TouchDownQueryCallback callback(worldPos);
m_world->QueryAABB(&callback, aabb);
// if the touched fixture was one of the flipper buttons, set that touch as
// the current touch for that button
if (callback.m_fixture == m_leftFlipperButtonFixture)
m_leftFlipperTouch = touch;
if (callback.m_fixture == m_rightFlipperButtonFixture)
m_rightFlipperTouch = touch;
}
}
示例3: onTouchesBegan
// Override this to find the body that was touched and remove it.
void DestroyBodyLayer::onTouchesBegan(const std::vector<Touch*>& touches, Event *unused_event)
{
Touch *touch = (Touch*)touches[0];
Point screenPos = touch->getLocationInView();
b2Vec2 worldPos = screenToWorld(screenPos);
// Make a small box around the touched point to query for overlapping fixtures
b2AABB aabb;
b2Vec2 d(0.001f, 0.001f);
aabb.lowerBound = worldPos - d;
aabb.upperBound = worldPos + d;
// Query the world for overlapping fixtures (the TouchDownQueryCallback simply
// looks for any fixture that contains the touched point)
TouchDownQueryCallback callback(worldPos);
m_world->QueryAABB(&callback, aabb);
// Check if we found something, and it was a dynamic body (could also destroy static
// bodies but we want to keep the pinch-zoom and pan from the superclass, and it's
// hard not to touch the ground body in this scene)
if (callback.m_fixture && callback.m_fixture->GetBody()->GetType() == b2_dynamicBody)
{
b2Body* touchedBody = callback.m_fixture->GetBody();
removeBodyFromWorld(touchedBody);
}
}
示例4: onTouchesBegan
void HoleDemo::onTouchesBegan(const std::vector<Touch*>& touches, Event* event)
{
Touch *touch = (Touch *)touches[0];
Vec2 point = _outerClipper->convertToNodeSpace(Director::getInstance()->convertToGL(touch->getLocationInView()));
auto rect = Rect(0, 0, _outerClipper->getContentSize().width, _outerClipper->getContentSize().height);
if (!rect.containsPoint(point)) return;
this->pokeHoleAtPoint(point);
}
示例5: handleTouchesEvent
int LuaEngine::handleTouchesEvent(void* data)
{
if (NULL == data)
return 0;
TouchesScriptData* touchesScriptData = static_cast<TouchesScriptData*>(data);
if (NULL == touchesScriptData->nativeObject || NULL == touchesScriptData->touches)
return 0;
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)touchesScriptData->nativeObject, ScriptHandlerMgr::kTouchesHandler);
if (0 == handler)
return 0;
switch (touchesScriptData->actionType)
{
case CCTOUCHBEGAN:
_stack->pushString("began");
break;
case CCTOUCHMOVED:
_stack->pushString("moved");
break;
case CCTOUCHENDED:
_stack->pushString("ended");
break;
case CCTOUCHCANCELLED:
_stack->pushString("cancelled");
break;
default:
return 0;
}
Director* pDirector = Director::getInstance();
lua_State *L = _stack->getLuaState();
int ret = 0;
lua_newtable(L);
int i = 1;
for (SetIterator it = touchesScriptData->touches->begin(); it != touchesScriptData->touches->end(); ++it)
{
Touch* pTouch = static_cast<Touch*>(*it);
Point pt = pDirector->convertToGL(pTouch->getLocationInView());
lua_pushnumber(L, pt.x);
lua_rawseti(L, -2, i++);
lua_pushnumber(L, pt.y);
lua_rawseti(L, -2, i++);
lua_pushinteger(L, pTouch->getID());
lua_rawseti(L, -2, i++);
}
ret = _stack->executeFunctionByHandler(handler, 2);
_stack->clean();
return ret;
}
示例6: onTouchesMoved
void ScrollViewDemo::onTouchesMoved(const std::vector<Touch*>& touches, Event *event)
{
if (!_scrolling) return;
Touch *touch = touches[0];
auto clipper = this->getChildByTag(kTagClipperNode);
auto point = clipper->convertToNodeSpace(Director::getInstance()->convertToGL(touch->getLocationInView()));
Vec2 diff = point - _lastPoint;
auto content = clipper->getChildByTag(kTagContentNode);
content->setPosition(content->getPosition() + diff);
_lastPoint = point;
}
示例7: handleTouchEvent
int LuaEngine::handleTouchEvent(void* data)
{
if (NULL == data)
return 0;
TouchScriptData* touchScriptData = static_cast<TouchScriptData*>(data);
if (NULL == touchScriptData->nativeObject || NULL == touchScriptData->touch)
return 0;
int handler = ScriptHandlerMgr::getInstance()->getObjectHandler((void*)touchScriptData->nativeObject, ScriptHandlerMgr::HandlerType::TOUCHES);
if (0 == handler)
return 0;
switch (touchScriptData->actionType)
{
case EventTouch::EventCode::BEGAN:
_stack->pushString("began");
break;
case EventTouch::EventCode::MOVED:
_stack->pushString("moved");
break;
case EventTouch::EventCode::ENDED:
_stack->pushString("ended");
break;
case EventTouch::EventCode::CANCELLED:
_stack->pushString("cancelled");
break;
default:
return 0;
}
int ret = 0;
Touch* touch = touchScriptData->touch;
if (NULL != touch) {
const cocos2d::Vec2 pt = Director::getInstance()->convertToGL(touch->getLocationInView());
_stack->pushFloat(pt.x);
_stack->pushFloat(pt.y);
const cocos2d::Vec2 prev_pt = Director::getInstance()->convertToGL(touch->getPreviousLocationInView());
_stack->pushFloat(prev_pt.x);
_stack->pushFloat(prev_pt.y);
ret = _stack->executeFunctionByHandler(handler, 5);
}
_stack->clean();
return ret;
}
示例8: isInCircle
bool BallSprite::isInCircle(Touch touch) {
const Vec2 bpos = this->getPosition();
Director* pDirector = CCDirector::getInstance();
Point touchPoint = pDirector -> convertToGL(touch.getLocationInView());
float dist = touchPoint.getDistance(bpos);
if(dist <= getBallRadius()) {
return true;
}
else {
return false;
}
}
示例9: onTouchesMoved
void GravityCtrlLayer::onTouchesMoved(const std::vector<cocos2d::Touch*>& touches, cocos2d::Event *unused_event) {
if (getState() == State::Active) {
Touch* touch = touches[0];
Point screenPos = touch->getLocationInView();
m_isCancelled = checkIsCancelled(screenPos);
if (m_isCancelled) {
m_wheelCtrl->cancel();
} else {
float angle = CMath::getAngle(m_center->x, m_center->y, screenPos.x, 1080 - screenPos.y);
cocos2d::log("angle for gravity: %f", angle);
m_wheelCtrl->setTargetAngle(angle);
}
}
}
示例10: executeLayerTouchesEvent
int LuaEngine::executeLayerTouchesEvent(Layer* pLayer, int eventType, Set *pTouches)
{
TouchScriptHandlerEntry* pScriptHandlerEntry = pLayer->getScriptTouchHandlerEntry();
if (!pScriptHandlerEntry) return 0;
int nHandler = pScriptHandlerEntry->getHandler();
if (!nHandler) return 0;
switch (eventType)
{
case CCTOUCHBEGAN:
_stack->pushString("began");
break;
case CCTOUCHMOVED:
_stack->pushString("moved");
break;
case CCTOUCHENDED:
_stack->pushString("ended");
break;
case CCTOUCHCANCELLED:
_stack->pushString("cancelled");
break;
default:
return 0;
}
Director* pDirector = Director::sharedDirector();
lua_State *L = _stack->getLuaState();
lua_newtable(L);
int i = 1;
for (SetIterator it = pTouches->begin(); it != pTouches->end(); ++it)
{
Touch* pTouch = (Touch*)*it;
Point pt = pDirector->convertToGL(pTouch->getLocationInView());
lua_pushnumber(L, pt.x);
lua_rawseti(L, -2, i++);
lua_pushnumber(L, pt.y);
lua_rawseti(L, -2, i++);
lua_pushinteger(L, pTouch->getID());
lua_rawseti(L, -2, i++);
}
int ret = _stack->executeFunctionByHandler(nHandler, 2);
_stack->clean();
return ret;
}
示例11: onTouchesBegan
// record when the user touches the left/right sides of the screen
void PlanetCuteRUBELayer::onTouchesBegan(const std::vector<Touch*>& touches, Event* event)
{
Size s = Director::getInstance()->getWinSize();
int middleOfScreen = s.width / 2;
for (auto it = touches.begin(); it != touches.end(); ++it) {
Touch* touch = (Touch*)*it;
// if the touch location was on a side of the screen that we don't already
// have a touch for, set that touch as the current touch for that side
Point screenPos = touch->getLocationInView();
if ( !m_leftTouch && screenPos.x < middleOfScreen )
m_leftTouch = touch;
if ( !m_rightTouch && screenPos.x > middleOfScreen )
m_rightTouch = touch;
}
}
示例12: executeNodeTouchesEvent
int LuaEngine::executeNodeTouchesEvent(Node* pNode, int eventType, const std::vector<Touch*>& touches, int phase)
{
CCScriptEventListenersForEvent *listeners = getListeners(pNode, phase == NODE_TOUCH_CAPTURING_PHASE ? NODE_TOUCH_CAPTURE_EVENT : NODE_TOUCH_EVENT);
if (!listeners) return 1;
_stack->clean();
LuaValueDict event;
switch (eventType)
{
case CCTOUCHBEGAN:
event["name"] = LuaValue::stringValue("began");
break;
case CCTOUCHMOVED:
event["name"] = LuaValue::stringValue("moved");
break;
case CCTOUCHENDED:
event["name"] = LuaValue::stringValue("ended");
break;
case CCTOUCHCANCELLED:
event["name"] = LuaValue::stringValue("cancelled");
break;
case CCTOUCHADDED:
event["name"] = LuaValue::stringValue("added");
break;
case CCTOUCHREMOVED:
event["name"] = LuaValue::stringValue("removed");
break;
default:
return 0;
}
event["mode"] = LuaValue::intValue((int)Touch::DispatchMode::ALL_AT_ONCE);
switch (phase)
{
case NODE_TOUCH_CAPTURING_PHASE:
event["phase"] = LuaValue::stringValue("capturing");
break;
case NODE_TOUCH_TARGETING_PHASE:
event["phase"] = LuaValue::stringValue("targeting");
break;
default:
event["phase"] = LuaValue::stringValue("unknown");
}
LuaValueDict points;
Director* pDirector = Director::getInstance();
char touchId[16];
for (auto touchIt = touches.begin(); touchIt != touches.end(); ++touchIt)
{
LuaValueDict point;
Touch* pTouch = (Touch*)*touchIt;
sprintf(touchId, "%d", pTouch->getID());
point["id"] = LuaValue::stringValue(touchId);
const Point pt = pDirector->convertToGL(pTouch->getLocationInView());
point["x"] = LuaValue::floatValue(pt.x);
point["y"] = LuaValue::floatValue(pt.y);
const Point prev = pDirector->convertToGL(pTouch->getPreviousLocationInView());
point["prevX"] = LuaValue::floatValue(prev.x);
point["prevY"] = LuaValue::floatValue(prev.y);
points[touchId] = LuaValue::dictValue(point);
}
event["points"] = LuaValue::dictValue(points);
_stack->pushLuaValueDict(event);
bool flagNeedClean = false;
for (auto it=listeners->begin(); it!=listeners->end(); ++it)
{
if ((*it)->removed) {
flagNeedClean = true;
continue;
}
_stack->copyValue(1);
_stack->executeFunctionByHandler((*it)->listener, 1);
_stack->settop(1);
}
cleanListeners(listeners, pNode, flagNeedClean);
_stack->clean();
return 1;
}
示例13: locationInGLFromTouch
inline Point locationInGLFromTouch(Touch& touch)
{
auto director = Director::getInstance();
return director->convertToGL(touch.getLocationInView());
}
示例14: executeScriptTouchHandler
int LuaEventNode::executeScriptTouchHandler(int nEventType, const std::vector<Touch*>& touches, int phase /* = NODE_TOUCH_TARGETING_PHASE */)
{
auto stack = initExecParam(this->getActiveNode(), phase);
if (!stack)
{
return 0;
}
LuaValueDict event;
switch (nEventType)
{
case CCTOUCHBEGAN:
event["name"] = LuaValue::stringValue("began");
break;
case CCTOUCHMOVED:
event["name"] = LuaValue::stringValue("moved");
break;
case CCTOUCHENDED:
event["name"] = LuaValue::stringValue("ended");
break;
case CCTOUCHCANCELLED:
event["name"] = LuaValue::stringValue("cancelled");
break;
case CCTOUCHADDED:
event["name"] = LuaValue::stringValue("added");
break;
case CCTOUCHREMOVED:
event["name"] = LuaValue::stringValue("removed");
break;
default:
return 0;
}
event["mode"] = LuaValue::intValue((int)Touch::DispatchMode::ALL_AT_ONCE);
switch (phase)
{
case NODE_TOUCH_CAPTURING_PHASE:
event["phase"] = LuaValue::stringValue("capturing");
break;
case NODE_TOUCH_TARGETING_PHASE:
event["phase"] = LuaValue::stringValue("targeting");
break;
default:
event["phase"] = LuaValue::stringValue("unknown");
}
LuaValueDict points;
Director* pDirector = Director::getInstance();
char touchId[16];
for (auto touchIt = touches.begin(); touchIt != touches.end(); ++touchIt)
{
LuaValueDict point;
Touch* pTouch = (Touch*)*touchIt;
sprintf(touchId, "%d", pTouch->getID());
point["id"] = LuaValue::stringValue(touchId);
const Point pt = pDirector->convertToGL(pTouch->getLocationInView());
point["x"] = LuaValue::floatValue(pt.x);
point["y"] = LuaValue::floatValue(pt.y);
const Point prev = pDirector->convertToGL(pTouch->getPreviousLocationInView());
point["prevX"] = LuaValue::floatValue(prev.x);
point["prevY"] = LuaValue::floatValue(prev.y);
points[touchId] = LuaValue::dictValue(point);
}
event["points"] = LuaValue::dictValue(points);
return callNodeEventDispatcher(stack, event);
}
示例15: handleTouch
bool TouchPool::handleTouch(TouchTrigger::TouchAction action,int num,intptr_t ids[],float xs[],float ys[])
{
intptr_t id = 0;
float x = 0.0f;
float y = 0.0f;
int unusedIndex = 0;
TouchTrigger touchTrigger;
for(int i=0;i<num;i++)
{
id = ids[i];
x = xs[i];
y = ys[i];
auto iter = _touchIdReorderMap.find(id);
// it is a new touch
if (iter == _touchIdReorderMap.end())
{
if(action != TouchTrigger::TouchAction::DOWN)
{
FKLOG("if the index doesn't exist, it is an error");
continue;
}
FKLOG("id = %ld",(long int) id);
unusedIndex = getUnUsedIndex();
// The touches is more than MAX_TOUCHES ?
if (unusedIndex == -1) {
FKLOG("The touches is more than MAX_TOUCHES, unusedIndex = %d", unusedIndex);
continue;
}
Touch* touch = _touches[unusedIndex] = new (std::nothrow) Touch();
touch->setTouchInfo(unusedIndex, x, y);
FKLOG("x = %f y = %f", touch->getLocationInView().x, touch->getLocationInView().y);
_touchIdReorderMap.insert(std::make_pair(id, unusedIndex));
touchTrigger._touches.push_back(touch);
}
else
{
FKLOG("unusedindex = %d", iter->second);
FKLOG("other x = %f y = %f", x, y);
Touch* touch = _touches[iter->second];
if (touch)
{
touch->setTouchInfo(iter->second, x, y);
touchTrigger._touches.push_back(touch);
if(action == TouchTrigger::TouchAction::UP || action == TouchTrigger::TouchAction::CANCEL)
{
_touches[iter->second] = nullptr;
removeUsedIndexBit(iter->second);
_touchIdReorderMap.erase(id);
}
}
else
{
// It is error, should return.
FKLOG("Moving touches with id: %ld error", (long int)id);
return false;
}
}
}
if (touchTrigger._touches.size() == 0)
{
FKLOG("touches: size = 0");
return false;
}
touchTrigger.setAction(action);
bool result = dispatchTouch(&touchTrigger);
if(action == TouchTrigger::TouchAction::UP || action == TouchTrigger::TouchAction::CANCEL)
{
for (auto& touch : touchTrigger._touches)
{
// release the touch object.
touch->release();
}
}
return result;
}