Scherfgen: 3D-Spieleprogrammierung

 
   
    
C/C++ Forum :: Spiele-/Grafikprogrammierung :: Aufbau eines Jump'n Run's (like Turrikan)  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten
Autor Nachricht
FinalbrainXP
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.05.2004
Beiträge: 16
Beitrag 05 Aug 2004 15:29   Titel:   Aufbau eines Jump'n Run's (like Turrikan)            Zitieren

Hi :leak:

habe mal eine konzeptionelle Frage an Euch. Habe mir eine "2D-Engine" geschrieben, welche auf directdraw7 aufsetzt. Sie kann Sprites verwalten und
auch animierbare Sprites! Ebenfalls kann ich aus Tilesets meine Grafiken laden.
Nun hatte ich schon ein schönes Bomberman vor einiger Zeit angefangen, welches Masterflüssig und recht gut aussah. Habe mich dabei einer 1-Layerd-Tile-Engine bedient. Ist aber nie Fertig geworden, da meine Datenkapslung bzw. mein herangehen and das Spiel schon recht umständlich realisiert war...spätestens wo Gegner reinkommen sollten, hatte ich den Überblick verloren. Die Engine ist recht schnell
und hatte dann auch auf dieser mal ein JumpnRun gebaut. Zwar lief es sehr flüssig (Physik für Sprung , Interaktion mit Umgebung etc. war noch nicht drinnen), doch ich war nicht wirklich zufrieden, was den Aufbau antraf!

Hier könnt mal schauen. (Achtung sind 2MB(wegen sound)und nur 16K upload) Aber würde mich freuen wenn ihr mal schaut ;-)

www.finalbrain.de/jumpnrun.rar

Ps: Musik anmachen! Ist von Turrikan geklaut..lol

Nun habe ich aber eine "saubere 2D-Engine" gebastelt, welche ich perfekt zum Proggen benutzen kann. Sie unterstützt jetzt im moment nur animierte Sprites, habe aber extra noch nicht weiterentwickelt!

Nun endlich meine Frage:

Wie sind Jumpnrauns konzeptionell aufgebaut (Denke da vor allem an Turrikan) ?

Vor allem interessiert mich die Art der Kollisionsabfrage:

Denke ich mache eine 3-Fach Layerc TileEngine..mit homogenen Tiles 32x32x32
und scrolle die dann in unterschiedlichen Geschwindigkeiten mit zentrierung auf den Spieler.

Aber wie wird die Kollisionsabfrage am besten realisiert ? :confused:

Hatte vorher immer einen Tag in jedes Teil gesetzt, welches mir sagt,
(Darfst durch oder nicht). Aber wie mache ich es, wenn treppenstufen etc. drinnen sind. Oder ein Berg ? Dachte ich mache mir eine virtuelle kollisionsmap, welche einfach schwarz-Weiss ist..und ich dann nach der Farbe abfrage..aber
du muss ich viel Locken und unlocken..und das geht auf die Performance.
Hatt jemand von euch schon ein "gutes" Jumpnrun gebastelt und kann mir da jemand nen paar tipps geben, oder weiss jemand nen Link, für nen aufbau eines JumpnRuns ? Weil will mich nicht schon wieder in eine Einbahnstrasse Proggen, wenn ichs
auch wirklich diesmal fertgistellen will *lol


Gruss ;)

Finalbrain

_________________
** Entweder man lebt oder man ist konsequent! **
Sgt. Nukem
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.06.2003
Beiträge: 2393
Beitrag 05 Aug 2004 17:27   Titel:   Re: Aufbau eines Jump'n Run's (like Turrikan)            Zitieren

Erstens heißt es Turrican, zweitens ist es von Manfred Trenz und rult derbst, drittens ist es kein
FinalbrainXP schrieb:
Jumpnrauns
sondern ein Shoot 'em Up, oder meinetwegen Shoot'nJump (lass' ich noch durchgehen)! :o) :live:


FinalbrainXP schrieb:
Dachte ich mache mir eine virtuelle kollisionsmap, welche einfach schwarz-Weiss ist..und ich dann nach der Farbe abfrage..aber
du muss ich viel Locken und unlocken..und das geht auf die Performance.


Von Deiner "Kollisions-Map" braucht die GraKa doch überhaupt nichts zu wissen?!? :confused:
TGGC
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.04.2001
Beiträge: 2564
Beitrag 05 Aug 2004 17:45   Titel:           Editieren    Zitieren

Turrican hatte zumindest aufm C64 8x8 Blöcke, und es fällt IMHO nicht negativ auf.


Bye, TGGC \-/

_________________
[ gm squared - Das beste Team, wo gibt! | I can, you can, miniCan! | Werde auch zum Helden | wöchentlich Netzkultur ]
Eure Dummheit kotzt mich an. - Lest mal der Hilfe, mich hat's auch gehelft! - Nur noch 2 Genies auf der Welt...
FinalbrainXP
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.05.2004
Beiträge: 16
Beitrag 05 Aug 2004 18:12   Titel:              Zitieren

Man Man ..das Ihr immer so kleinlich sein müsst! Ich will eine Information, keine Pseudobelehrung!!

1.) Es heißt Turrican..ok..damit kann ich leben
2.) Das es von Manfrd Tenz ist, hatte ich nie bestritten!!
3.) Das mit Separierung von Jum'n Run und Shoot'n Run ist Schwachsinn!
Das kommt, wenn man sich nicht selber Gedanken über die Wort selber macht
und jedes Wort übernimmt, was irgend jemand mal in die Luft geworfen hat.
Jump'n run heißt Laufen und Springen!! Also ist es demnach ein Jump'n Run
und ein Shoot'em Run! Aber warum so kleinlich ? Bei Supermario sagt auch
keiner Shoot'em Run/Jump, obwohl man da durchaus schießen kann!
4.) Das mit dem Speicher stimmt, warum einfach wenns auch kompliziert geht ;)
Hatte meine CollsionsMap im Videospeicher, was ja auch schwachsinn ist!

5.) Klar ..Turrican rult derbst..deswegen will ich auch eins basteln! :)

Falls mir einer Tipps zum Aufbau eines solchen Spiels geben möchte, und nicht nur hier rumposen will, der darf sich gerne melden :)

MFG

FinalbrainXP

_________________
** Entweder man lebt oder man ist konsequent! **
FinalbrainXP
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.05.2004
Beiträge: 16
Beitrag 05 Aug 2004 18:20   Titel:              Zitieren

Ach ja@TGGC ..habe gerade deine Demos (4K) angeschaut..sehen echt klasse aus...großes Kompliment ;-)

_________________
** Entweder man lebt oder man ist konsequent! **
interpreter
Mitglied

Benutzerprofil
Anmeldungsdatum: 23.05.2003
Beiträge: 390
Beitrag 05 Aug 2004 18:28   Titel:              Zitieren

FinalbrainXP schrieb:

5.) Klar ..Turrican rult derbst..deswegen will ich auch eins basteln! :)

Metal Slug rult noch mehr :cool:
FinalbrainXP
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.05.2004
Beiträge: 16
Beitrag 05 Aug 2004 18:32   Titel:   höhrt sich gut an            Zitieren

Metal Slug..was ist das...goggle mal danach ;)

_________________
** Entweder man lebt oder man ist konsequent! **
interpreter
Mitglied

Benutzerprofil
Anmeldungsdatum: 23.05.2003
Beiträge: 390
Beitrag 05 Aug 2004 18:57   Titel:   Re: höhrt sich gut an            Zitieren

FinalbrainXP schrieb:
Metal Slug..was ist das...goggle mal danach ;)


http://de.wikipedia.org/wiki/Metal_Slug *g
TGGC
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.04.2001
Beiträge: 2564
Beitrag 05 Aug 2004 22:04   Titel:           Editieren    Zitieren

Ich habe doch 'nen ernstgemeinten Tipp gegeben: Nimm relativ kleine Blöcke, das merkt IMHO keiner. Pixelgenau braucht man nicht (when will they ever learn... 8).


Bye, TGGC \-/

_________________
[ gm squared - Das beste Team, wo gibt! | I can, you can, miniCan! | Werde auch zum Helden | wöchentlich Netzkultur ]
Eure Dummheit kotzt mich an. - Lest mal der Hilfe, mich hat's auch gehelft! - Nur noch 2 Genies auf der Welt...
FinalbrainXP
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.05.2004
Beiträge: 16
Neuer Beitrag 06 Aug 2004 00:35   Titel:              Zitieren

Jep danke für die Info..bentuze 32x32 Tiles! Bei Tiles die Größer als der CPU-Cache sind, habe ich enorme Speed einbußen ;-)

Meine Engine wird cool. Habe mir einen TileManager gebastelt: Habe nun nix mehr
new und delete am Hut.

Hier mal nen beispiel für die Darstellung eines Auschnittes aus einem Bitmap
+ Transparenz auf dem Bildschirm mit directx!

Code:
Engine.InitDirectDraw(WIN_WIDTH, WIN_HEIGHT, WIN_HWND);
    Engine.containerPool->GimmeContainer(0)->PumpSpriteInContainerFromCellFile(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);

Engine.BeginRender(COLOR_BLACK);
    Engine.containerPool->GimmeContainer(0)->PumpSpriteFromContainer(0)->DrawMe(0,0);

Engine.EndRender();
Code:
Engine.InitDirectDraw(WIN_WIDTH, WIN_HEIGHT, WIN_HWND);
Engine.containerPool->GimmeContainer(0)->PumpSpriteInContainerFromCellFile(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);

Engine.BeginRender(COLOR_BLACK);
Engine.containerPool->GimmeContainer(0)->PumpSpriteFromContainer(0)->DrawMe(0,0);

Engine.EndRender();
Code:
Engine.InitDirectDraw(WIN_WIDTH, WIN_HEIGHT, WIN_HWND);
    Engine.containerPool->GimmeContainer(0)->PumpSpriteInContainerFromCellFile(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);

Engine.BeginRender(COLOR_BLACK);
    Engine.containerPool->GimmeContainer(0)->PumpSpriteFromContainer(0)->DrawMe(0,0);

Engine.EndRender();


Ist cool gewrapped..mann muss nix freigebn oder initialiseren bis auf das Engine-Objekt! Und man hat direkt nen fertig erstelltes Sprite im Container, welches man jederzeit holen kann. Jetzt kommt noch clonen rein zum teilen von Sprite ressourcen ..

Mal sehen..das wird bestimmt was ,-)

Gruss

Finalbrain

_________________
** Entweder man lebt oder man ist konsequent! **
C/C++ Forum :: Spiele-/Grafikprogrammierung :: Aufbau eines Jump'n Run's (like Turrikan)  
Gehen Sie zu Seite 1, 2  Weiter
Auf Beitrag antworten




Bei Antworten zu diesem Thema benachrichtigen
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum mitmachen.
Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.
Scherfgen: 3D-Spieleprogrammierung

 
   
    
C/C++ Forum :: Spiele-/Grafikprogrammierung :: Aufbau eines Jump'n Run's (like Turrikan)  
Gehen Sie zu Seite Zurück  1, 2, 3  Weiter
Auf Beitrag antworten
Autor Nachricht
Sgt. Nukem
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.06.2003
Beiträge: 2400
Beitrag 06 Aug 2004 01:50   Titel:              Zitieren

FinalbrainXP schrieb:
Also ist es demnach ein Jump'n Run
und ein Shoot'em Run! Aber warum so kleinlich ? Bei Supermario sagt auch
keiner Shoot'em Run/Jump, obwohl man da durchaus schießen kann!


:confused: Damit meinst Du sicher das, was man machen kann, wenn man die "Blume" aufsammelt?!? :confused: LOL
Naja, das mag zwar lustig sein, aber einem Vergleich mit dem Dauerfeuer-Im-Kreis-Drehen eines Turrican oder Probotector hält es nun nicht stand... :p


FinalbrainXP schrieb:
4.) Das mit dem Speicher stimmt, warum einfach wenns auch kompliziert geht ;)
Hatte meine CollsionsMap im Videospeicher, was ja auch schwachsinn ist!


Wenn Du Spaß dran hast kannst Du sie zur Abwechslung auch mal in den Soundkarten-RAM ballern oder durch den TCP-Stack... :D


FinalbrainXP schrieb:
Meine Engine wird cool. [...]
Code:
Engine.InitDirectDraw(WIN_WIDTH, WIN_HEIGHT, WIN_HWND);
    Engine.containerPool->GimmeContainer(0)->PumpSpriteInContainerFromCellFile(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);

Engine.BeginRender(COLOR_BLACK);
    Engine.containerPool->GimmeContainer(0)->PumpSpriteFromContainer(0)->DrawMe(0,0);

Engine.EndRender();
Code:
Engine.InitDirectDraw(WIN_WIDTH, WIN_HEIGHT, WIN_HWND);
Engine.containerPool->GimmeContainer(0)->PumpSpriteInContainerFromCellFile(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);

Engine.BeginRender(COLOR_BLACK);
Engine.containerPool->GimmeContainer(0)->PumpSpriteFromContainer(0)->DrawMe(0,0);

Engine.EndRender();
Code:
Engine.InitDirectDraw(WIN_WIDTH, WIN_HEIGHT, WIN_HWND);
    Engine.containerPool->GimmeContainer(0)->PumpSpriteInContainerFromCellFile(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);

Engine.BeginRender(COLOR_BLACK);
    Engine.containerPool->GimmeContainer(0)->PumpSpriteFromContainer(0)->DrawMe(0,0);

Engine.EndRender();


Ist cool gewrapped..mann muss nix freigebn oder initialiseren bis auf das Engine-Objekt! Und man hat direkt nen fertig erstelltes Sprite im Container, welches man jederzeit holen kann. [...]


Der einzige der hier posen tut, bist Du! :p ;)

*scherz* :o) :live:
FinalbrainXP
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.05.2004
Beiträge: 18
Beitrag 06 Aug 2004 02:12   Titel:              Zitieren

Na..noch was dagegen zu setzen ?


www.finalbrain.de/pose.jpg

_________________
** Entweder man lebt oder man ist konsequent! **
Sgt. Nukem
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.06.2003
Beiträge: 2400
Beitrag 06 Aug 2004 02:20   Titel:              Zitieren

+++ SSSCHHHHWOAAAAARZZZEEEEENNNNNNEGGGGGGAAAAAA +++ :live:
FinalbrainXP
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.05.2004
Beiträge: 18
Beitrag 06 Aug 2004 02:31   Titel:              Zitieren

*lol ..musst immer das letze Wort haben :D

_________________
** Entweder man lebt oder man ist konsequent! **
Sgt. Nukem
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.06.2003
Beiträge: 2400
Beitrag 06 Aug 2004 02:40   Titel:              Zitieren

Yup. :cool:


EDIT: BTW: Manfred hat sich für das Cover von Turrican von ManOwaR's Kings Of Metal-Album inspirieren lassen (kam 2 Jahre vorher raus), womit jawohl eindeutig bewiesen wäre :arrow: auch ManOwaR herrschen wahrhaftig! :o)


Zuletzt bearbeitet von Sgt. Nukem am 06 Aug 2004 02:54, insgesamt 1-mal bearbeitet
otze
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.01.2004
Beiträge: 1347
Beitrag 06 Aug 2004 09:02   Titel:              Zitieren

C/C++ Code:
Engine.containerPool->GimmeContainer(0)->PumpSpriteInContainerFromCellFile(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);
C/C++ Code:
Engine.containerPool->GimmeContainer(0)->PumpSpriteInContainerFromCellFile(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);
C/C++ Code:
Engine.containerPool->GimmeContainer(0)->PumpSpriteInContainerFromCellFile(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);

also des hät i anders gemacht :rolleyes:
müssen das am ende echt 11 parameter sein? und wieso steht da gimme und nicht giveMe? containerpools sieht mir auch ziemlich public aus.
C/C++ Code:
Engine.GiveMeContainer(0).createSprite(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);
C/C++ Code:
Engine.GiveMeContainer(0).createSprite(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);
C/C++ Code:
Engine.GiveMeContainer(0).createSprite(0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);

oder gleich:
C/C++ Code:
Engine.createSprite(0,0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);
C/C++ Code:
Engine.createSprite(0,0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);
C/C++ Code:
Engine.createSprite(0,0,"Sprite3.bmp",true,265,400,0,0,32,32,COLOR_MAGENTA,true);


aber an den parametern solltest echt was ändern^^.

_________________
Jesus Christus! Da blickt ja kein Mensch mehr durch.
FinalbrainXP
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.05.2004
Beiträge: 18
Beitrag 06 Aug 2004 10:56   Titel:              Zitieren

Neee das ist ne bombensichere Sache..da würde ICH garnix dran ändern!!

1.) Gimme ist cooler! Und ist ja meine Engine mein Style!
Ist ja nicht ne kommerzielle Engine mit Standard Konventionen!

2.) Da sind 3 Objekte Public! ContainerPool, Container, Sprite!
Das sind alles 3 eingenständige Klassen...welche man auch ausserhalb
der Engine benutzen kann!! Wenn ich jetzt nen animerbares Objekt mache,
muss ich dem nur den Pool-Pointer übergeben..und es kann sich dann komplett
anhand verschiedener Sequenz-Container selbstanimieren! Da sich die
Container selber den Speicher bereinigen, muss ich beim animierbarem Objekt
nichts mehr beachten..bzw initialisieren! Bei deiner Version
funktioniert dies dann weniger Objekt orientiert, oder ich müsste die
Zuweisung an die Container private mit in den Engine-Code Packen, welches
ich nicht tue, da die Klassen getrennt von einander entwickelt wurden, und
so besser gewartet werden können! Glaube mir das ist echt gut durchdacht!

AnimierbaresObjekt->Pool = Engine.ContainerPool

AnimierbaresObjekt->SetSequences(0,0,0) //Animation links gehenm
AnimierbaresObjekt->SetSequences(1,0,1) //Animation rechts gehen

if Keyboard.links
AnimierbaresObjekt->AnimateMe(0);

if Keyboard.rechts
AnimierbaresObjekt->AnimateMe(1)

AnimierbaresObjekt->DrawMe();



3.) Das mit den Parametern ist doch toll! Verstehe nicht warum es schlecht ist.
Bei direktX gibt es auch mäßig Parameter! Und dieses ist ja die größte
Funktion! Ob ich jetzt 11 untereinander oder hintereinander mache..ist doch
egal! Jedes Sprite braucht halt diese 11 Unterschiedlichen Parameter!
Es kommen deshalb soviele Parameter zustande, weil diese Funktion
Teilausschnitte aus Bitmaps lesen kann und direkt nen Sprite daraus kloppen
kann!

PumpSpriteInContainerFromCellFile(int pos,char * path, bool videoMemory, int
bmpWidth, int bmpHeight, int startX, int startY, int partWidth, int
partHeight, unsigned int colorKey, bool transparent)


Das coole ist hierbei, wenn diese "vielen" Parameter einmal eingegeben sind, dann braucht man sich um nichts mehr kümmern! Brauche später im Mainloop nur im Sprite den bool transparent umsetzen wenn ich will, und es verändert sich intern die DrawRoutine dieses Sprites dazu. Auch gebe ich hier die bevorzugung des Speichertyps an und dieses Sprite wird versuchen diesen Speicher zu nehemn, ist der ausgelastet, wird auf nen nderen Speichertyp ausgewichen. Auch kann hier gestrecht/gezoomt geladen werden!

Gruss :cool:

Finalbrain

_________________
** Entweder man lebt oder man ist konsequent! **


Zuletzt bearbeitet von FinalbrainXP am 06 Aug 2004 11:05, insgesamt 1-mal bearbeitet
life
Mitglied

Benutzerprofil
Anmeldungsdatum: 14.07.2004
Beiträge: 16
Beitrag 06 Aug 2004 11:33   Titel:              Zitieren

löl. Das nennt man wohl "übermotiviert" -_-
TGGC
Mitglied

Benutzerprofil
Anmeldungsdatum: 30.04.2001
Beiträge: 2568
Beitrag 06 Aug 2004 11:38   Titel:           Editieren    Zitieren

FinalbrainXP schrieb:
1.) Gimme ist cooler! Und ist ja meine Engine mein Style!
*ROFL*

Und zu viele Enter sind auch dein Stil?


Bye, TGGC \-/

_________________
[ gm squared - Das beste Team, wo gibt! | I can, you can, miniCan! | Werde auch zum Helden | wöchentlich Netzkultur ]
Eure Dummheit kotzt mich an. - Lest mal der Hilfe, mich hat's auch gehelft! - Nur noch 2 Genies auf der Welt...
FinalbrainXP
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.05.2004
Beiträge: 18
Neuer Beitrag 06 Aug 2004 12:03   Titel:              Zitieren

Jep..viele Enter = Gute Trennung! :D :live:

Übermotiviert ? Das ist bei weitem das untertriebendste, was ich jemals gehört habe ;)


Ach ja "Otze"..dein Name gefällt mir auch nicht!!!!!
Soviel zum Thema "Warum denn gimme anstatt giveme" ?

Warum denn "Otze" ??? :rolleyes:


Stay tight, be straight, ich bin der Referent, ich bin raus!! (Oder so ähnlich)


Finalbrain :cool: :cool: :cool:

_________________
** Entweder man lebt oder man ist konsequent! **
C/C++ Forum :: Spiele-/Grafikprogrammierung :: Aufbau eines Jump'n Run's (like Turrikan)  
Gehen Sie zu Seite Zurück  1, 2, 3  Weiter
Auf Beitrag antworten




Bei Antworten zu diesem Thema benachrichtigen
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum mitmachen.
Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.
Scherfgen: 3D-Spieleprogrammierung

 
   
    
C/C++ Forum :: Spiele-/Grafikprogrammierung :: Aufbau eines Jump'n Run's (like Turrikan)  
Gehen Sie zu Seite Zurück  1, 2, 3
Auf Beitrag antworten
Autor Nachricht
otze
Mitglied

Benutzerprofil
Anmeldungsdatum: 15.01.2004
Beiträge: 1354
Beitrag 06 Aug 2004 12:27   Titel:              Zitieren

FinalbrainXP schrieb:

Warum denn "Otze" ??? :rolleyes:

weil der name ne geschichte hat, und ich seitdem überall so heisse?

//edit jemals vom kapselung oder open-closed-principle gehört?
diese regelungen haben schon einen sinn^^

//edit2
Zitat:

2.) Da sind 3 Objekte Public! ContainerPool, Container, Sprite!
Das sind alles 3 eingenständige Klassen...welche man auch ausserhalb
der Engine benutzen kann!! Wenn ich jetzt nen animerbares Objekt mache,
muss ich dem nur den Pool-Pointer übergeben..

schön für die public objecte, aber wärs wirklich so schwer nen schönen geter/seter zu schreiben? wenn ich das objekt direkt habe, kann ich damit mit leichtigkeit schindluder betreiben(selbst wenns nicht absicht ist).
ne const referenz auf das objekt zurückzugeben ist sicherer, genau dasselbe gilt für const pointer, wenn du weist, dass du das objekt ändern willst, dann benutzt du den seter, sonst den geter,und schon kannst du sicher sein, dass kein schindluder damit betrieben wird.

Zitat:


3.) Das mit den Parametern ist doch toll! Verstehe nicht warum es schlecht ist.
Bei direktX gibt es auch mäßig Parameter! Und dieses ist ja die größte
Funktion! Ob ich jetzt 11 untereinander oder hintereinander mache..ist doch
egal! Jedes Sprite braucht halt diese 11 Unterschiedlichen Parameter!
Es kommen deshalb soviele Parameter zustande, weil diese Funktion
Teilausschnitte aus Bitmaps lesen kann und direkt nen Sprite daraus kloppen
kann!

bitte zähl mir mal direkt ausm kopp alle parameter der dx funktion
D3DXCreateTextureFromFileInMemoryEx
auf, sie hat nur 15 parameter,und dann schau dir deine aussage nochmal an.
viele parameter sind nicht gut, ziel soll sein, funktionen mit maximal 6-7 parametern zu schreiben.
zb bei deiner funktion:
C/C++ Code:
PumpSpriteInContainerFromCellFile(int pos,char * path, bool videoMemory, int
bmpWidth, int bmpHeight, int startX, int startY, int partWidth, int
partHeight, unsigned int colorKey, bool transparent)
C/C++ Code:
PumpSpriteInContainerFromCellFile(int pos,char * path, bool videoMemory, int
bmpWidth, int bmpHeight, int startX, int startY, int partWidth, int
partHeight, unsigned int colorKey, bool transparent)
C/C++ Code:
PumpSpriteInContainerFromCellFile(int pos,char * path, bool videoMemory, int
bmpWidth, int bmpHeight, int startX, int startY, int partWidth, int
partHeight, unsigned int colorKey, bool transparent)

ich würds so machen
C/C++ Code:
createSprite(vector2 topLeft,vector2 downRight,const bitmap& bitmap,int spriteIdentifier,bool videoMemory=true);
C/C++ Code:
createSprite(vector2 topLeft,vector2 downRight,const bitmap& bitmap,int spriteIdentifier,bool videoMemory=true);
C/C++ Code:
createSprite(vector2 topLeft,vector2 downRight,const bitmap& bitmap,int spriteIdentifier,bool videoMemory=true);

den rest der infos kann man direkt aus dem bitmap nehmen, zb colorkeying oder die größe/breite des bitmaps,oder ob es transparent sein soll.
ich hab hier mit der bitmapklasse einfach eine zusätzliche abstraktionsebene eingebaut, und die positionen in vectoren zusammengefasst.

_________________
Jesus Christus! Da blickt ja kein Mensch mehr durch.


Zuletzt bearbeitet von otze am 06 Aug 2004 13:06, insgesamt 4-mal bearbeitet
interpreter
Mitglied

Benutzerprofil
Anmeldungsdatum: 23.05.2003
Beiträge: 393
Beitrag 06 Aug 2004 14:08   Titel:              Zitieren

FinalbrainXP schrieb:
Neee das ist ne bombensichere Sache..da würde ICH garnix dran ändern!!

Warum zeigst du es uns dann überhaupt?

Zitat:

1.) Gimme ist cooler! Und ist ja meine Engine mein Style!

lol

Zitat:

Ist ja nicht ne kommerzielle Engine mit Standard Konventionen!

Ah, und drum sollte man keine Konventionen beachten? :die:

Zitat:

2.) Da sind 3 Objekte Public! ContainerPool, Container, Sprite!
Das sind alles 3 eingenständige Klassen...welche man auch ausserhalb
der Engine benutzen kann!! Wenn ich jetzt nen animerbares Objekt mache,
muss ich dem nur den Pool-Pointer übergeben..und es kann sich dann komplett
anhand verschiedener Sequenz-Container selbstanimieren! Da sich die
Container selber den Speicher bereinigen, muss ich beim animierbarem Objekt
nichts mehr beachten..bzw initialisieren! Bei deiner Version
funktioniert dies dann weniger Objekt orientiert, oder ich müsste die
Zuweisung an die Container private mit in den Engine-Code Packen, welches
ich nicht tue, da die Klassen getrennt von einander entwickelt wurden, und
so besser gewartet werden können! Glaube mir das ist echt gut durchdacht!

AnimierbaresObjekt->Pool = Engine.ContainerPool

AnimierbaresObjekt->SetSequences(0,0,0) //Animation links gehenm
AnimierbaresObjekt->SetSequences(1,0,1) //Animation rechts gehen

if Keyboard.links
AnimierbaresObjekt->AnimateMe(0);

if Keyboard.rechts
AnimierbaresObjekt->AnimateMe(1)

AnimierbaresObjekt->DrawMe();


Hm, bis jetzt kein einziger Satz ohne Ausrufezeichen...

Zitat:

3.) Das mit den Parametern ist doch toll! Verstehe nicht warum es schlecht ist.

Kein Kommentar

Zitat:

Bei direktX gibt es auch mäßig Parameter!

massig

Zitat:

Und dieses ist ja die größte
Funktion! Ob ich jetzt 11 untereinander oder hintereinander mache..ist doch
egal! Jedes Sprite braucht halt diese 11 Unterschiedlichen Parameter!

Falsch. Selbst wenn du alle Werte benötigst, könntest du 1. mit Defaultparametern arbeiten und 2. Strukturen benutzen.


Zuletzt bearbeitet von interpreter am 06 Aug 2004 14:08, insgesamt 1-mal bearbeitet
Sgt. Nukem
Mitglied

Benutzerprofil
Anmeldungsdatum: 09.06.2003
Beiträge: 2405
Beitrag 06 Aug 2004 14:31   Titel:              Zitieren

Vielleicht solltest Du dieses "Sprite wird noch aus einem großen Bitmap ausgeschnitten" abkapseln von der Sprite-Lade-Routine.
Sprites die man nicht zerschneiden muß bekommen dann immer 0 als Parameter, das ist doch doof.
Lieber für Sprite-Tables noch eine kleine Sprite-Extractor-Funktion davorhängen.

Zum anderen könntest Du Funktionen überladen. Falls es mir z.B. schnurzegal ist wo im Speicher das Ding lagert reicht ein LoadSprite(char* filename), daß meinetwegen die Position im Container zurückgibt (Größe kann die Funktion selber aus der Datei rausfinden).
FinalbrainXP
Mitglied

Benutzerprofil
Anmeldungsdatum: 28.05.2004
Beiträge: 19
Neuer Beitrag 06 Aug 2004 15:59   Titel:              Zitieren

*rooofl

Wollte hier nicht rumposen! :p Hatte nur euphorisch meinen schönen Wrapper gezeigt.

1.) Der public Pool hatt keinerlei public Elemente. Werde es aber mit nem
Const Pointer noch zusätzlich absichern...gute Idee ;)

2.)
Zu den Parametern! Colorkeying muss ich explizit angeben, da ich dies sonst im Bitmap vermerken muss. Keinen Bock auf Graphikbearbeitung. Werde RECTS und VECTOREN nehmen :) Tranparenz nehme ich raus..und setze anstatt dessen einfach ne Spezielle Farbe für Colorkeying rein! Danke für den Tipp. Videomem nehme ich auch raus! Wenn sowieso ansonsten auf anderen Speicher ausgewichen wird (VIDEO_MEM -> PHYS), nehme ich einfach als Default "VIDEO_MEM". Größe/Breite wollte ich drinnlassen, weil automatisch gestaucht/gestrecht werden kann..vielleicht ist das irgendwann mal nützlich :D Sieht jetzt schon Dank eurer Hilfe viel besser aus. ;)

Ach ja..und um den "Interpreter" wieder auf den Teppich zu bringen:

Zitat:
Warum zeigst du es uns dann überhaupt?


Weil ich so zufrieden mit meinem Code war, das ich Ihn einfach
zu dieser Zeit zeigen musste. Dachte halt der wäre recht gut und bombensicher und wollte einen Ausschnitt der Struktur zu schau stellen. Natürlich haben mich mehrere Leute (du ausgenommen) dank guten Argumenten umgestimmt und ich konnte sogar noch was lernen! Ein ganz normaler kommunikativer Vorgang wie es Ihn tausende male in der Welt gibt! Hättest du alles Aufmerksam gelesen, wäre dir diese unerklärliche Handlung vielleicht nicht ganz so schleierhaft gewesen :p

Zitat:
Ah, und drum sollte man keine Konventionen beachten?

Das habe ich nicht gesagt. Schlecht interpretiert! Ich bezog dies auf übliche Namensgebungen von Funktionen, welche man durchaus ignorieren kann, wenn der alternative Funktionsname dennoch aufschlussreich ist. Gimme finde ich recht eindeutig und werde damit nicht Teufelsküche kommen.

Zitat:
Hm, bis jetzt kein einziger Satz ohne Ausrufezeichen...

Das ist eine automatisierte Handlung von mir! Die habe ich mir angewöhnt, weil ich immer so Leute wie dich belehren musste!!

Zitat:
massig


Du hast einen Rechtschreibfehler gefunden. Danke, du bekommst eine 1 dafür!
Vielleicht solltest du mal in ein DeutschLehrer-Forum wechseln!
Ein normales Maaß an Spitzfindigkeit ist meiner Meinung nach ok, aber es kann auch übertrieben werden.

[/quote]Falsch. Selbst wenn du alle Werte benötigst, könntest du 1. mit Defaultparametern arbeiten und 2. Strukturen benutzen.[quote]

Diese Idee ist gut! Ich werde Sie machen! :)


MFG

Finalbrain

_________________
** Entweder man lebt oder man ist konsequent! **


Zuletzt bearbeitet von FinalbrainXP am 06 Aug 2004 16:03, insgesamt 1-mal bearbeitet
ChockoCookie
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.01.2004
Beiträge: 174
Neuer Beitrag 06 Aug 2004 17:32   Titel:              Zitieren

FinalbrainXP schrieb:

3.) Das mit Separierung von Jum'n Run und Shoot'n Run ist Schwachsinn!
Das kommt, wenn man sich nicht selber Gedanken über die Wort selber macht
und jedes Wort übernimmt, was irgend jemand mal in die Luft geworfen hat.
Jump'n run heißt Laufen und Springen!! Also ist es demnach ein Jump'n Run
und ein Shoot'em Run! Aber warum so kleinlich ? Bei Supermario sagt auch
keiner Shoot'em Run/Jump, obwohl man da durchaus schießen kann!


Oh mann dieser Thread muss in die lolotw. :D FinalbrainXP 4 President

_________________
Wenn das Universum in C Programmiert ist, dann sind Schwarze Löcher wohl dereferenzierte NULL Pointer.
-- Charlie Cole
C/C++ Forum :: Spiele-/Grafikprogrammierung :: Aufbau eines Jump'n Run's (like Turrikan)  
Gehen Sie zu Seite Zurück  1, 2, 3
Auf Beitrag antworten




Bei Antworten zu diesem Thema benachrichtigen
Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum mitmachen.
Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.