我试着用camera的lookat(),但是没有效果。
没用过,不过camera不是要3维点的吗?
你可以在update里面设置camera的position。我昨天试过,加上Vec2的lerp做个平滑
也可以使用Follow
自己写点代码控制下就好了, 人物始终在屏幕中心, 底图在不停的移动。
可是我希望的是camera在移动,图移动的话我的其他的一些功能会受到影响。
我尝试了,我把camera的setposition()一直设置为player的position,还是没有动。
但我觉得这个问题肯定在cocos支持3D之前就有了啊,不会都是通过移动图层来解决的吧。
camera没用过,但是楼下提的Follow是可以实现你这个效果的,详情你可以看一下test中的例子
不可能哦,我待会把我的例子发给你看一下。
好的,谢谢。
好的
这是init的代码
//绑定事件
w = s = a = d = 0;
auto listener = EventListenerKeyboard::create();
listener->onKeyPressed = [&](cocos2d::EventKeyboard::KeyCode keycode, Event* event)->void
{
switch (keycode)
{
case EventKeyboard::KeyCode::KEY_W:
w = 1;
break;
case EventKeyboard::KeyCode::KEY_S:
s = 1;
break;
case EventKeyboard::KeyCode::KEY_A:
a = 1;
break;
case EventKeyboard::KeyCode::KEY_D:
d = 1;
break;
default:
break;
}
};
listener->onKeyReleased = [&](cocos2d::EventKeyboard::KeyCode keycode, Event* event)->void
{
switch (keycode)
{
case EventKeyboard::KeyCode::KEY_W:
w = 0;
break;
case EventKeyboard::KeyCode::KEY_S:
s = 0;
break;
case EventKeyboard::KeyCode::KEY_A:
a = 0;
break;
case EventKeyboard::KeyCode::KEY_D:
d = 0;
break;
default:
break;
}
};
getEventDispatcher()->addEventListenerWithSceneGraphPriority(listener, this);
scheduleUpdate();//开启帧循环
这是update代码
//移动sprite
int speed = 500;
if (w || s)
{
int dir = -1;
if (w)
dir = 1;
sprite->setPositionY(sprite->getPositionY() + (dir * speed * delta));
}
if (a || d)
{
int dir = -1;
if(d)
dir = 1;
sprite->setPositionX(sprite->getPositionX() + (dir * speed * delta));
}
//平滑移动camera
auto camera = getDefaultCamera();
auto cameraPos = camera->getPosition();
auto spritePos = sprite->getPosition();
float scale = 1 + (abs(cameraPos.distance(spritePos)) / 50);
camera->setPosition(camera->getPosition().lerp(sprite->getPosition(), delta*scale));
要在头文件定义w、s、a、d、sprite五个变量
效果
不知道为啥,用了四个波浪线键还是只有部分代码排版是好的
其实核心代码就一行
camera->setPosition(sprite->getPosition());
你先这么做两句代码,this->setCameraMask(2),(this指整个layer)这个“2”和你之前设置的camera flag有关,camera->setCameraFlag(CameraFlag::USER1),以此类推,总共8个镜头。然后再移动camera就行了。想要camera中心点“照着”sprite“,你得先创建一个空节点A,然后camera是A的子节点,设置camera的偏移坐标(-s.width/2,-s.heght/2)。接着这个A节点跟着sprite的坐标就成了。
之所以camera->setPosition不动,是因为所有的元素是渲染在scene的default camera下的。你要用setCameraMask把你要渲染的精灵都放到你新建的camera里。此时场景里是有两个camera的,你移动的是你的新camera,而default camera是scene的子节点。
好的,我等会看看,现在在写别的,谢谢。
使用lerp平滑移动,会有不规律的抖动…是时不时的出现,没有什么规律,有的时候又跑一段时间都没出现,请问有碰到类似的问题么?是怎么解决的?