sw如何设置模拟地面

sw如何设置模拟地面,第1张

添加一个ScrollView。

1、在布局文件中添加一个ScrollView,并设置它的背景为一张地面图片,可以使用AndroidStudio提供的图片资源或者自己添加一张图片。

2、在ScrollView中添加需要放在地面上的View,例如一些按钮、文字等。

3、设置后,ScrollView的背景将显示为一张地面图片,而添加的View将显示在地面图片上方,从而实现模拟地面的效果。

且看 CCMenu 的touchbegan函数:

bool CCMenu::ccTouchBegan(CCTouch* touch, CCEvent* event)

{

CC_UNUSED_PARAM(event)

if (m_eState != kCCMenuStateWaiting || ! m_bVisible || !m_bEnabled)

{

return false

}

for (CCNode *c = this->m_pParentc != NULLc = c->getParent())

{

if (c->isVisible() == false)

{

return false

}

}

m_pSelectedItem = this->itemForTouch(touch)

if (m_pSelectedItem)

{

m_eState = kCCMenuStateTrackingTouch

m_pSelectedItem->selected()

return true

}

return false

}

touchbegan时响应点击事件的一部分因素在于那个for循环,只有当前menu的所有父节点可见时,才能继续响应点击事件。

除此之外,当该menu可见时,那么该menu就会遍历左右的children,且看

CCMenuItem* CCMenu::itemForTouch(CCTouch *touch)

{

CCPoint touchLocation = touch->getLocation()

if (m_pChildren &&m_pChildren->count() >0)

{

CCObject* pObject = NULL

CCARRAY_FOREACH(m_pChildren, pObject)

{

CCMenuItem* pChild = dynamic_cast<CCMenuItem*>(pObject)

if (pChild &&pChild->isVisible() &&pChild->isEnabled())

{

CCPoint local = pChild->convertToNodeSpace(touchLocation)

CCRect r = pChild->rect()

r.origin = CCPointZero

if (r.containsPoint(local))

{

return pChild

}

}

}

}

return NULL

}

当且仅当 if (pChild &&pChild->isVisible() &&pChild->isEnabled()) Child存在 可见 使能 时就会响应对应的点击时间。

于是,又根据cocos2d touch事件的分发规则,先响应优先级高的layer,然后menu就先响应点击了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11505502.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-16
下一篇 2023-05-16

发表评论

登录后才能评论

评论列表(0条)

保存