Irrlicht Bullets

Я пытался использовать пули в Irrlicht безрезультатно. Я попытался закодировать два набора пуль. У меня есть «лазер» и «ракета». Первый стреляет рекламным щитом, второй стреляет из сетки.

Мне удалось создать рабочий рекламный щит для первого, но я совершенно не могу изменить его положение каким-либо образом. Я не хочу, чтобы это появлялось на лице игрока, а скорее на оружии (в правой части экрана). Я пытался привязать рекламный щит к узлу оружия, и я пробовал большие и маленькие значения, чтобы проверить любые проблемы с ценностями. Ни один не работал.

Я создал узел IMesh для использования ракеты. Я получаю сбои в изобилии при любой попытке выстрелить с ним. Мой вывод выдаст мне следующие ошибки при попытке запустить меш:

Loaded mesh: ../../media/rocketlauncher_shell.obj
First-chance exception at 0x00281a34 in 15.LoadIrrFile.exe: 0xC0000005: Access violation reading location 0x00000000.
Unhandled exception at 0x00281a34 in 15.LoadIrrFile.exe: 0xC0000005: Access violation reading location 0x00000000.
The program '[8092] 15.LoadIrrFile.exe: Native' has exited with code -1073741819 (0xc0000005).

Я проверил более миллиона раз, и путь полностью верен. rocketlauncher_shell.obj радостно сидит там прямо внутри ../../media

Вот мой код:

void CDemo::shoot()
{
scene::ISceneManager* sm = device->getSceneManager();
scene::ICameraSceneNode* camera = sm->getActiveCamera();

if (!camera)
return;

SParticleImpact imp;
imp.when = 0;

// get line of camera

core::vector3df start = camera->getPosition();
core::vector3df end = (camera->getTarget() - start);
end.normalize();

SBullet bullet;

bullet.direction = end;
start += end*8.0f;
end = start + (end * camera->getFarValue());

scene::ISceneNode* node = 0;

if (shotgunactive)
{
// TEMPORARY CRASH PREVENTION

node = sm->addBillboardSceneNode(0,
core::dimension2d<f32>(25,25), start);

bullet.node = node;
node->setName("laserbullet");

node->setMaterialFlag(video::EMF_LIGHTING, false);
node->setMaterialTexture(0, device->getVideoDriver()->getTexture("../../media/fireball.bmp"));
node->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
}

if (laseractive)
{
// create fire ball

node = sm->addBillboardSceneNode(0, core::dimension2d<f32>(25,25), core::vector3df(100.0f,0.1f,2.0f));

bullet.node = node;
node->setName("laserbullet");

node->setMaterialFlag(video::EMF_LIGHTING, false);
node->setMaterialTexture(0, device->getVideoDriver()->getTexture("../../media/fireball.bmp"));
node->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);

cout << "LASER SHOT" << endl;
}

else if (rocketactive)
{
// Draw Rocket Shell
scene::IMesh* nodemesh = smgr->getMesh("../../media/rocketlauncher_shell.obj");
scene::IMeshSceneNode* node = smgr->addMeshSceneNode(nodemesh);
node->setMaterialFlag(video::EMF_LIGHTING, false);
node->setMaterialTexture(0, device->getVideoDriver()->getTexture("../../media/6fe78a94.tga"));
node->setMaterialType(video::EMT_TRANSPARENT_ADD_COLOR);
bullet.node = node;
node->setName("rocketbullet");
}

f32 length = (f32)(end - start).getLength();
const f32 speed = 0.6f;
u32 time = (u32)(length / speed);

scene::ISceneNodeAnimator* anim = 0;

// set flight line

anim = sm->createFlyStraightAnimator(start, end, time);

node->addAnimator(anim);
anim->drop();

// when it should disappear
bullet.when = device->getTimer()->getTime() + (time - 100);
Bullets.push_back(bullet);

// play sound
#ifdef USE_IRRKLANG
if (ballSound)
irrKlang->play2D(ballSound);
#endif
#ifdef USE_SDL_MIXER
if (ballSound)
playSound(ballSound);
#endifreturn;
}

Bools во всех случаях работают отлично. строки отладки будут всегда отображаться, и все будет работать полностью, как и должно быть, кроме вышеупомянутых проблем.

Пожалуйста, обратите внимание на материал внутри «лазерактивных» и «рокетативных» линий.

Я построил эту программу поверх проекта по умолчанию «LoadIrrFile», # 15.

Вот полный код для любых необходимых ссылок: http://pastie.org/pastes/8623503/text

(это не самый красивый код — работа в процессе, первая попытка Irrlicht когда-либо)

С другой стороны — возможно ли использование оружия для ударной атаки в Ирлихте? Я хотел бы закодировать мое ружье с такой функциональностью.

3

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector