Hi,
ich versuche grade einen online Ego Shooter zu programmieren. (ich spiele erstmal nur damit rum)
Dass hier habe ich bis jetzt:
Code:
#include <windows.h>
#include <irrlicht.h>
#include <TCHAR.h>
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
TCHAR *szAppName = TEXT("Ego Shooter by Marlene Deluxe");
ICameraSceneNode* camera;
class Character
{
private:
int hp;
public:
int getHP()
{
return hp;
}
void setHP(int health)
{
hp = health;
}
};
class MyEventReceiver : public IEventReceiver
{
public:
bool OnEvent(const SEvent& event)
{
if (event.EventType == EET_KEY_INPUT_EVENT && !event.KeyInput.PressedDown)
{
// tastenreaktionen brauch ich jetzt noch nicht
/*switch (event.KeyInput.Key)
{
case KEY_SPACE:
return true;
}*/
}
return false;
}
};
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
// initialisieren usw.
MyEventReceiver receiver;
int cx = GetSystemMetrics(SM_CXSCREEN), cy = GetSystemMetrics(SM_CYSCREEN);
IrrlichtDevice *device = createDevice(EDT_DIRECT3D9, dimension2d<s32>(cx, cy), 32, true, false, true, &receiver);
if (!device)
return 1;
IVideoDriver* driver = device->getVideoDriver();
ISceneManager* smgr = device->getSceneManager();
IGUIEnvironment* guienv = device->getGUIEnvironment();
// Maus off, Kamera und Name
device->getCursorControl()->setVisible(false);
device->setWindowCaption(szAppName);
SKeyMap keyMap[5];
keyMap[0].Action = EKA_MOVE_FORWARD;
keyMap[0].KeyCode = KEY_KEY_W;
keyMap[1].Action = EKA_MOVE_BACKWARD;
keyMap[1].KeyCode = KEY_KEY_S;
keyMap[2].Action = EKA_STRAFE_LEFT;
keyMap[2].KeyCode = KEY_KEY_A;
keyMap[3].Action = EKA_STRAFE_RIGHT;
keyMap[3].KeyCode = KEY_KEY_D;
keyMap[4].Action = EKA_JUMP_UP;
keyMap[4].KeyCode = KEY_SPACE;
camera = smgr->addCameraSceneNodeFPS(0, 100.0f, 300.0f, -1, keyMap, 5, true, 1.0);
// Map und Collision
device->getFileSystem()->addZipFileArchive("media/lifeline.pk3");
IAnimatedMesh* mesh = smgr->getMesh("lifeline.bsp");
ISceneNode* node = 0;
node = smgr->addOctTreeSceneNode(mesh->getMesh(0), 0, -1, 128);
node->setPosition(core::vector3df(-1300,-144,-1249));
ITriangleSelector* selector=smgr->createOctTreeTriangleSelector(mesh->getMesh(0), node,128);
node->setTriangleSelector(selector);
if (selector)
{
ISceneNodeAnimator* anim = smgr->createCollisionResponseAnimator(
selector, camera, vector3df(30,50,30),
vector3df(0,-1,0),
vector3df(0,50,0));
selector->drop();
camera->addAnimator(anim);
anim->drop();
}
// skybox erstellen
driver->setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, false);
smgr->addSkyBoxSceneNode(
driver->getTexture("media/irrlicht2_up.jpg"),
driver->getTexture("media/irrlicht2_dn.jpg"),
driver->getTexture("media/irrlicht2_lf.jpg"),
driver->getTexture("media/irrlicht2_rt.jpg"),
driver->getTexture("media/irrlicht2_ft.jpg"),
driver->getTexture("media/irrlicht2_bk.jpg"));
driver->setTextureCreationFlag(ETCF_CREATE_MIP_MAPS, true);
// Hauptcharacter
Character main;
main.setHP(100);
TCHAR hp[10];
// Font
IGUIFont* font = guienv->getFont("media/bigfont.png");
// Chat
IGUIEditBox* chat = guienv->addEditBox(L"",rect<s32>(400, cy-90, cx-390, cy-60));
// Gun
IAnimatedMesh* gun = smgr->getMesh("media/Gun.3ds");
IAnimatedMeshSceneNode* meshGun = smgr->addAnimatedMeshSceneNode(gun);
meshGun->setMaterialFlag(EMF_LIGHTING, false);
meshGun->setFrameLoop(0, 0);
meshGun->setMaterialTexture( 0, driver->getTexture("media/gunTexture.bmp") );
camera->addChild(meshGun);
meshGun->setPosition(meshGun->getPosition() + vector3df(13, -30, 0));
meshGun->setRotation(meshGun->getRotation() + vector3df(0, 180, 0));
while(device->run())
{
driver->beginScene(true, true, SColor(255,100,101,140));
smgr->drawAll();
guienv->drawAll();
_stprintf(hp, TEXT("HP: %d"), main.getHP());
font->draw(hp, rect<s32>(50, cy-100, 100, cy-50), SColor(255, 255, 0, 0));
driver->endScene();
}
device->drop();
return 0;
}
Findet ihr den Ansatz so ok? Hier mal ein Screen, wie es bis jetzt aussieht:
(die Texturen müssen natürlich noch geändert werden)

Zu meiner Frage:
Wie kann ich einen "Schuss" mit der linken Maustaste realisieren?
Ich möchte es nicht so haben wie in cs, also das man nur den Schuss hört.
Ich möchte es so machen, dass ein Strahl oder sowas aus der Gun kommt.
Wie würdet ihr dass machen? Und wo bekomme ich solche Texturen und Modelle her(Strahlen usw.)?
Und findet ihr es realistisch, einen guten Shooter zu programmieren, mit Modellen und Grafiken ausm Netz?
Also ohne Grafiker oder eigene Grafiken?
Danke