写了一个多点触控的类 ,在2.x版本,3.0,3.1等版本稳定正常运行,到了3.3 final 大部分时间缩放不正常,偶尔正常 , 有时候缩小变成放大,放大变缩小,反过来了,有时候不能操作
帖代码,求指教 主要是zoom的时候有时不正常 !
void ControlLayer::onTouchesMoved( const std::vector& touches, cocos2d::Event *event )
{
if( m_bHandling )
{
if( m_bSingleTouch )
{
if( m_pDelegate )
{
Touch *t = touches.at( 0 );
if( t->getLocation().getDistance( t->getStartLocation() ) > MIN_DRAG_DISTANCE )
{
m_pDelegate->handleSingleTouchCancelled( t->getPreviousLocation() );
m_bSingleTouch = false;
}
else
{
m_pDelegate->handleSingleTouchMoved( t->getPreviousLocation(), t->getLocation() );
}
}
}
else
{
if( m_pTouchArray.size() == 1 )
{
m_bZooming = true;
if( m_pDelegate )
{
Touch *t0 = dynamic_cast( m_pTouchArray.at( 0 ) );
m_pDelegate->handleDrag( t0->getDelta() );
}
}
else if( m_pTouchArray.size() == 2 )
{
Touch *t0 = dynamic_cast( m_pTouchArray.at( 0 ) );
Touch *t1 = dynamic_cast( m_pTouchArray.at( 1 ) );
Point l0 = t0->getLocation() - t0->getPreviousLocation();
Point l1 = t1->getLocation() - t1->getPreviousLocation();
float fm = l0.x * l1.x + l0.y * l1.y;
if( fm < 0)
{
m_bZooming = true;
if( m_pDelegate )
{
float delta = t0->getLocation().getDistance( t1->getLocation() ) - t0->getPreviousLocation().getDistance( t1->getPreviousLocation() );
if( fabs( delta ) < MAX_ZOOM_DETECT_DISTANCE )
{
Point center = ( t0->getLocation() + t1->getLocation() ) / 2.0f;
m_pDelegate->handleZoom( center, delta );
}
}
}
else
{
if( m_pDelegate )
{
m_pDelegate->handleDrag( l0 );
}
}
}
}
}
}
```
另外版本发布也太快了,大半年,从2.3到3.3 这挺好的, 但是,文档跟不上,很多地方标记了CC_DEPRECATED_ATTRIBUTE, 没有任何说明,替换方式.
还有android版本,有时候需要把cocos2dx 放到一个view里,但是Cocos2dxGLSurfaceView并没有办法单独使用, 又因为现有的项目已经有一个基类,不能续承自Cocos2dxActivity 需要自已重写, 改动蛮大,
看了半天发现要重写Java_xxxx_getGLContextAttrs,因为返回值是int] ,看了下才发现整个GL上下文初始化都放这里了, 问题每次更新都要对照着改一遍