你好我正在开发一个游戏,其中对象必须在随机位置的屏幕上移动.我正在使用cocos2dx框架.我的代码是
CCSize winSize = CCDirector::sharedDirector()->getWinSize();
int minY = HelloWorld::bird->getContentSize().height/2;
int maxY = winSize.height - HelloWorld::bird->getContentSize().height/2;
int minX = HelloWorld::bird->getContentSize().width/2;
int maxX = winSize.width - HelloWorld::bird->getContentSize().width/2;
int range = maxX - minX;
int actualY = (rand() % range) + minY;
int actualX = (rand() % range) + minX;
//HelloWorld::bird->setPosition(ccp(actualX, actualY));
CCActionInterval* actionTo = CCMoveTo::actionWithDuration(3, ccp(actualX,actualY));
HelloWorld::runAction(actionTo);
Run Code Online (Sandbox Code Playgroud)
它正在工作但只生成正数.所以精灵正在走出屏幕.我搜索了教程,但没有得到.
我的测试环境:
Xcode 4.6,新cocos2d-x + box2d项目cocos2d-2.1beta3-x-2.1.1 PhysicsEditor 1.0.10
我在PhysicsEditor cocos2dx演示的HelloWorldScene中修改了一下以使其更简单,以下是我的一些代码:
initPhysics
gravity.Set(0.0f,0.0f);
这样精灵就不会动了.
将ccTouchesEnded中的源代码替换为:
CCTouch*pTouch =(CCTouch*)touches-> anyObject();
CCPoint location = pTouch-> locationInView(pTouch-> view());
CCPoint convLoc = CCDirector :: sharedDirector() - > convertToGL(location);
b2Vec2 v = b2Vec2(convLoc.x/PTM_RATIO,convLoc.y/PTM_RATIO);
for(b2Body*b = world-> GetBodyList(); b; b = b-> GetNext()){
b2Fixture *f = b->GetFixtureList(); // get the first fixture
CCSprite *sprite =(CCSprite *) b->GetUserData();
if(sprite != NULL)
{
if(f -> TestPoint(v))
{
CCLog("You touched a body %d",sprite->getTag());
}
}
Run Code Online (Sandbox Code Playgroud)
}
问题是TestPoint只在非常小的区域内返回true(不是整个形状区域).
这是截图:

任何人都可以建议我如何调试这个问题?谢谢
更新:显示PhysicsEditor生成的数据

嗨,我正在将我的游戏从Corona SDK转换为Cocos2d-x 3.0 alpha.
我需要创建一个带有文本的图像按钮.在Corona SDK中它非常简单widget.newButton,它可以x, y, size, font, image在单个函数中使用所有等.
现在我在Cocos2d-x中找不到任何替代品.我发现的最接近的是MenuItemImage
auto closeItem = MenuItemImage::create(
"blank.png",
"blank-selected.png",
CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));
closeItem->setPosition(Point(origin.x + visibleSize.width - closeItem->getContentSize().width/2 , origin.y + closeItem->getContentSize().height/2));
auto menu = Menu::create(closeItem, NULL);
menu->setPosition(Point::ZERO);
this->addChild(menu, 1);
Run Code Online (Sandbox Code Playgroud)
它需要images和event,但我不能设置title和font它.任何人都知道如何设置标题和字体?
我有一个矢量word_list,我想在word_list中找到一个单词.我用的是功能
bool Mylayer::existWord(vector<string> word_list, string word)
{
if (std::lower_bound(word_list.begin(), word_list.end(), word) != word_list.end())
{
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
但它并不确切.有人可以告诉我为什么吗?
如何在cocos2dx 3.0中绘制圆或线.
我的代码是
DrawNode *drawnode = DrawNode::create();
drawnode->drawDot(ccp(15,Director::sharedDirector()->getVisibleSize().height/2),50,Color4F(255,255,255,255));
this->addChild(drawnode);
Run Code Online (Sandbox Code Playgroud) 我遇到了这个函数的麻烦,我不知道它的含义是什么:
menuItem1->setCallback([&](cocos2d::Ref *sender)
Run Code Online (Sandbox Code Playgroud)
输入函数,参数是ccMenuCallback&:
/** set the callback to the menu item
* @code
* In js,can contain two params,the second param is jsptr
* @endcode
* @lua NA
*/
void setCallback(const ccMenuCallback& callback);
Run Code Online (Sandbox Code Playgroud)
和
typedef std::function<void(Ref*)> ccMenuCallback;
Run Code Online (Sandbox Code Playgroud) 似乎CCString在Cocos2d-x v3.5中已弃用.我们应该用什么呢?还有,弃用的原因是什么?
以下几行源代码(cocos2d)
BodyNode *dataA = (BodyNode*) bodyA->GetUserData();
BodyNode *dataB = (BodyNode*) bodyB->GetUserData();
Class p1 = [Tuna class];
Class p2 = [Oilbarrel class];
Class p3 = [Barrelhorizontal class];
if( [dataA isKindOfClass:p1] ||[dataB isKindOfClass:p1]
|| [dataA isKindOfClass:p2] ||[dataB isKindOfClass:p2]
|| [dataA isKindOfClass:p3] ||[dataB isKindOfClass:p3]
)
{
state1 = tBomb1Hit;
}
Run Code Online (Sandbox Code Playgroud)
你可以帮我改变cocos2dx中的上述编码吗?
所以,我创建了一个State类.在State该类的create函数中,它StateVisual通过调用StateVisual类的create函数创建一个类,并将自身作为参数传递.(参数是参考,因此没有复制).所述StateVisual然后设置参数(的State实例),因为它的父变量,它是一个状态类型的指针.
在StateVisual创建函数中,一切正常.但是,当你使用它的更新方法,并尝试打印它的父级大小时,它会打印一些奇怪的值.
#ifndef STATE_H
#define STATE_H
#include "cocos2d.h"
class StateVisual;
class State {
public:
State();
~State();
static State create();
StateVisual *visual;
float size;
void setSize(float);
void update(float);
private:
cocos2d::Scheduler* _scheduler;
};
#endif
Run Code Online (Sandbox Code Playgroud)
StateVisual.cpp
#ifndef STATE_VIS_H
#define STATE_VIS_H
#include "cocos2d.h"
#include "State.h"
class StateVisual : public cocos2d::Sprite {
public:
StateVisual();
~StateVisual();
// create a visual
State* parent;
static StateVisual* create(State& parent);
cocos2d::Label* label;
void setSize(float);
void update(float); …Run Code Online (Sandbox Code Playgroud)