Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual studio 2010 如何检查同一数组元素的冲突检测?_Visual Studio 2010_Cocos2d Iphone_Cocos2d X - Fatal编程技术网

Visual studio 2010 如何检查同一数组元素的冲突检测?

Visual studio 2010 如何检查同一数组元素的冲突检测?,visual-studio-2010,cocos2d-iphone,cocos2d-x,Visual Studio 2010,Cocos2d Iphone,Cocos2d X,我已经为一个游戏编写了代码,其中有一些鸟在飞翔。我创建了CCSprite的数组,并将它们添加到场景中。现在,它为每个鸟对象分配一个调度程序,以便在屏幕上沿随机方向移动。都在工作。现在我在鸟类碰撞中遇到了麻烦 我试图在数组上运行CCARRAY\u FOREACH循环,但给出的错误 0xC0000005: Access violation reading location 0xfeeefeee. 请帮助我如何在数组元素移动时进行碰撞检测更新冲突方法未执行 我的代码是: #include "Hel

我已经为一个游戏编写了代码,其中有一些鸟在飞翔。我创建了
CCSprite
的数组,并将它们添加到场景中。现在,它为每个鸟对象分配一个调度程序,以便在屏幕上沿随机方向移动。都在工作。现在我在鸟类碰撞中遇到了麻烦

我试图在数组上运行
CCARRAY\u FOREACH
循环,但给出的错误

 0xC0000005: Access violation reading location 0xfeeefeee.
请帮助我如何在数组元素移动时进行碰撞检测<代码>更新冲突方法未执行

我的代码是:

#include "HelloWorldScene.h"

using namespace cocos2d;

CCScene* HelloWorld::scene()
{
    CCScene * scene = NULL;
    do 
    {
        // 'scene' is an autorelease object
        scene = CCScene::create();
        CC_BREAK_IF(! scene);

        // 'layer' is an autorelease object
        HelloWorld *layer = HelloWorld::create();
        CC_BREAK_IF(! layer);

        // add layer as a child to scene
        scene->addChild(layer);
    } while (0);

    // return the scene
    return scene;
}

// on "init" you need to initialize your instance
bool HelloWorld::init()
{
    //srand(time(NULL));
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    birds = CCArray::create();
    for(int j = 0; j<5; j++){
        CCSprite *bird = CCSprite::create("twitter_square.png");
        bird->setTag(j);
        int max = rand() % 480;
        int min = rand() % 320;
        bird->setPosition(ccp(max, min));
        this->addChild(bird);
        birds->addObject(bird);
        bird->schedule( schedule_selector(HelloWorld::moveBird), 5.0 );
bird->schedule( schedule_selector(HelloWorld::updateCollison), 5.0 );
    }

    return true;
}

void HelloWorld::menuCloseCallback(CCObject* pSender)
{
    CCDirector::sharedDirector()->end();
}


void HelloWorld::moveBird(float dt)
{
    CCSize size = CCDirector::sharedDirector()->getWinSize();
    int max = rand() % (int)size.width;
    int min = rand() % (int)size.height;
    CCActionInterval*  actionTo = CCMoveTo::actionWithDuration(5, ccp(max,min));
    this->runAction(actionTo);
}

void HelloWorld::updateCollison(float dt)
{
    CCObject *obj;
    for(int i=0; i < birds->count(); i++)
    {
        CCLOG("$$$$$$$$$$$$$$$$$$$$$$$");
    }
}
#包括“HelloWorldScene.h”
使用名称空间cocos2d;
CCScene*HelloWorld::scene()
{
CCScene*scene=NULL;
做
{
//“场景”是一个自动释放对象
scene=CCScene::create();
CC_BREAK_IF(!scene);
//“层”是一个自动释放对象
HelloWorld*layer=HelloWorld::create();
如果(!层),CC_BREAK_;
//将层作为子层添加到场景中
场景->添加子对象(层);
}而(0);
//返回现场
返回场景;
}
//在“init”中,您需要初始化实例
bool HelloWorld::init()
{
//srand(时间(空));
CCSize size=CCDirector::sharedDirector()->getWinSize();
birds=CCArray::create();
对于(int j=0;jsetTag(j);
int max=rand()%480;
int min=rand()%320;
鸟->设置位置(ccp(最大、最小));
这个孩子(鸟);
鸟->添加对象(鸟);
bird->schedule(schedule_选择器(HelloWorld::moveBird),5.0);
bird->schedule(schedule_选择器(HelloWorld::updateCollison),5.0);
}
返回true;
}
void HelloWorld::menuCloseCallback(cObject*pSender)
{
CCDirector::sharedDirector()->end();
}
void HelloWorld::moveBird(float dt)
{
CCSize size=CCDirector::sharedDirector()->getWinSize();
int max=rand()%(int)size.width;
int min=rand()%(int)size.height;
CCActionInterval*actionTo=CCMoveTo::actionWithDuration(5,ccp(最大,最小));
此->运行操作(actionTo);
}
void HelloWorld::updateCollison(float dt)
{
c对象*obj;
对于(int i=0;icount();i++)
{
CCLOG(“$$$$$$$$$$$$”);
}
}

最好在一个更新函数中执行操作…例如,在调用MoveBird函数中进行一次更新,该函数将包含您的moving bird代码

其次,现在调用检查冲突函数

void update (float dt) {

MoveBird();     // Move how many birds you want to move 
CheckCollision();

}
现在如何检查你们的鸟的碰撞

在碰撞函数forLoop中,执行鸟类数组检查

if(mBirdsArray[i]->boundingBox().containsPoint(mBirdsArray[j]->getPosition()))
反之亦然

我希望这能奏效…也许还有比这更好的逻辑