3 Ebenen Programmierung

Übersicht BlitzBasic Beginners-Corner

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen

NightPhoenix

Betreff: 3 Ebenen Programmierung

BeitragFr, Dez 29, 2006 15:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Mal ne kurze Frage zu verschiedenen Programmierebenen, bzw. "Level"

Wenn ich in einem Spiel zu einer Stelle komme wo ich in ein neues Level gehe und damit völlig neue Objekte und neue Variablen verwende, wie muss ich das dann programmieren?

Muss ich für jedes Level eine neue .bb Datei machen? So wärs irgendwie einfacher für mich, als wenn das alles in einem Code steckt.

Wie sollte man das machen?

MfG.

5k41

BeitragFr, Dez 29, 2006 15:39
Antworten mit Zitat
Benutzer-Profile anzeigen
du solltest die Level an sich überhaupt nicht programmieren, sondern nur ein Programm mit dem du jene erstellen kannst, und ein anderes, was jene dann lädt.

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

NightPhoenix

BeitragFr, Dez 29, 2006 15:42
Antworten mit Zitat
Benutzer-Profile anzeigen
nein das sollen vorgefertigte level sein, selbst positionierte objekte...

stell dir ein spiel vor.... gothic2 beispielsweise... man läuft von khorinis in die alte minenkolonie, es kommt ein ladebildschrim und man ist in einer neuen welt.

man brauch ja ganz neue schleifen, neue lichter, neue objekte


wie realisiert man sowas im programmcode?
am besten noch übersichtlich ^^

the FR3AK

BeitragFr, Dez 29, 2006 15:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach doch 2 Levels und wenn du an der Position wo das andere level kommen soll dann lädst du das eine level und machst das andere level weg also löschen^^

NightPhoenix

BeitragFr, Dez 29, 2006 15:54
Antworten mit Zitat
Benutzer-Profile anzeigen
@TheFreak
schonmal bemerkt dass das ja die frage ist? Wink
.... wie realisiere ich sowas im programmcode?

BESSERES BEISPIEL:

Ich spiele auf der Kampagnenkarte mit völlig verkehrten größenverhältnissen und lowpoly Mini-Objekten

eine schlacht beginnt

das spiel lädt eine völlig neue welt: die Schlachtkarte! mit naturgetreuen größenverhältnissen und detailierten objekten mit komplett anderer Textur


-> es ist so bei "Rome - Total War"
Dann haben wir ein 2 Ebenen Spiel

Die 3. Ebene wäre eine 1st person perspektive wo man auf einem noch detailreicherem schlachtfeld rumläuft und selbst daran teilnimmt!

JEDES MAL ZWISCHEN DEN EBENEN LIEGEN LADEZEITEN, WENN ICH VON EINER EBENE ZUR ANDEREN WECHSEL


Jemand Ideen wie es die ganzen Spiele machen? Wie würdet ihr es machen?
MfG.

5k41

BeitragFr, Dez 29, 2006 16:25
Antworten mit Zitat
Benutzer-Profile anzeigen
auch dort brauchst du keine neuen Schleifen etc. ich schreib dir nun einfach auf wie ich es machen würde. Ich würde einen Editor schreiben, der mit Types arbeitet und in dem du deine Lichter, Objekte und Landschaften gestalten kannst. Nun schreibst du das ganze vor dem Beenden in eine Textdatei, die so aussehen könnte:
[Lights]
"Mainlight"
Position 10,10,10
Rotation 100,0,0
"Secondlight"
...
[Objects]
"Tree"
Name "baum.b3d"
TexName "baum.png"
Position 10,0,10
Rotation 0,100,0
usw.

im spiel musst du dann nur alle Objecte auslesen, für jedes einen Type erstellen und es an die entsprechende Stelle setzen, bei einem Levelwechsel, werden alle alten Types gelöscht und die des neuen Levels dafür geladen.

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

NightPhoenix

BeitragFr, Dez 29, 2006 16:29
Antworten mit Zitat
Benutzer-Profile anzeigen
klingt sehr kompliziert.... hab noch nie mit types gearbeitet.... geschweige denn extra einen editor erstellt....
geht das denn nicht noch einfacher?

reicht es erstmal wenn ich mir zum anfang viele .bb dateien mache und sie später "zusammenfüge"?

Blitzcoder

Newsposter

BeitragFr, Dez 29, 2006 16:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Wenn du noch nie mit Types gearbeitet hast, solltest du dir das schnellstens angewöhnen, bevor du irgendetwas anderes machst. Types sind verdammt wichtig.
P4 3 Ghz@3,55Ghz|GF 6600GT 256MB|Samsung 80GB | 2x Samsung 160GB|2048MB DDR-400 RAM|6 Mbit Flatrate | Logitech G15 | Samsung 225BW-TFT | Ubuntu Gutsy Linux | Windows Vista | Desktop | Blog | CollIDE | Worklog
________________
|°°°°°°°°°°°°°°||'""|""\__,_
|______________ ||__ |__|__ |)
|(@) |(@)"""**|(@)(@)****|(@)

the FR3AK

BeitragFr, Dez 29, 2006 16:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ist ein Types Tutorial:

http://www.robsite.de/daten/tutorials/Types.zip

NightPhoenix

BeitragFr, Dez 29, 2006 16:41
Antworten mit Zitat
Benutzer-Profile anzeigen
danke! Wink

also um das mal grob zu sagen:

types sind sowas wie programmabschnitte die informationen enthalten und nur in einem bestimmten fall von blitz gelesen werden?

5k41

BeitragFr, Dez 29, 2006 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
nein:D
Types kann man mit C++ Strukturen vergleichen... hab ich aber auch bestimmt schon 10 mal erklärt... such mal...

MfG
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Eingeproggt

BeitragFr, Dez 29, 2006 16:44
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich würd sagen, Types sind sowas wie Arrays nur mit mehr Möglichkeiten (Man ist nicht an eine bestimmte Länge gebunden)
Gewinner des BCC 18, 33 und 65 sowie MiniBCC 9

NightPhoenix

BeitragFr, Dez 29, 2006 21:06
Antworten mit Zitat
Benutzer-Profile anzeigen
also das tutorial über types ist das wohl vewirrenste was ich in meinem ganzen Leben jemals gelesen habe Shocked
Mein Gehirn ist mindestens zur hälfte weggeschmolzen >.<

soweit ich das jetzt verstanden habe ist das sowas wie ne interne Ordneranlegung, bloß den Sinn und Zweck konnte ich aus dem Tutorial nicht rausfinden. Was zur Hölle hat das mit ner adressdatenbank zu tun? >.<

*gegen Wand spring*

the FR3AK

BeitragFr, Dez 29, 2006 21:31
Antworten mit Zitat
Benutzer-Profile anzeigen
Hier ein Sample wo man gut erkennen kann für was Types zu gebrauchen sind^^

Code: [AUSKLAPPEN]
Graphics3D 800,600
SetBuffer BackBuffer()

camera = CreateCamera()
PositionEntity camera, 0,-100, 0

tempblock = CreateCube()
PointEntity camera, tempblock
FreeEntity tempblock


Type cubes
   Field entity
End Type

While Not KeyDown(1)

   If MouseDown(1)
      c.cubes = New cubes
      c\entity = CreateCube()
         PositionEntity c\entity, Rand(200)-100, Rand(50), Rand(200)-100
      EntityColor c\entity, Rnd(255), Rnd(255), Rnd(255)
   EndIf
   
   
   UpdateWorld
   RenderWorld
   Flip
   Cls
Wend


Hoffentlich hilft dir das Rolling Eyes
 

Mr Hopp

BeitragFr, Dez 29, 2006 23:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hab mein erstes großes Game auch ohne Types geproggt....wenn ich mir das heute wieder anguck denk ich nur "Ach du sch***e" Very Happy

Es ist zwar sehr kompliziert zu verstehen aber es MUSS sein Wink
Zitat:
Wie poste ich falsch?

Nachdem ich Google, die FAQ's und die Boardsuche erfolgreich ignoriert habe, erstelle ich zwei bis fünf neue Themen, in den falschen Unterforen, mit kreativen Titeln und undeutlichem Text, unter dem sich jeder etwas anderes vorstellen kann.

the FR3AK

BeitragFr, Dez 29, 2006 23:58
Antworten mit Zitat
Benutzer-Profile anzeigen
Wie hieß denn das Game? Smile

Kernle 32DLL

BeitragSa, Dez 30, 2006 1:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Types sind nicht schwer ^^
jedenfalls, wenn man wie ich einen weiteren Befehl hinzufügt.
Dann wird alles um einiges leichter....

Code: [AUSKLAPPEN]
Type Baum
   Field mesh
   Field Name$
   Field X_Cord
   Field Z_Cord
End Type

Global Baum.Baum ;<--- den Befehl meine ich !!!

;Erstellen
Baum = New Baum
Baum\mesh = CreateCube() ;später hier irgenteine mesh-lade-routine zwischenklemmen
Baum\Name = "Hans" ;OK, sinnlos ^^
Baum\X_Cord = Rand(0,100) ;Baum irgentwo platzieren...
Baum\Z_Cord = Rand(0,100) ;Baum irgentwo platzieren...
PositionEntity Baum\mesh,Baum\X_Cord,0,Baum\Z_Cord

Baum = New Baum
Baum\mesh = CreateCube() ;später hier irgenteine mesh-lade-routine zwischenklemmen
Baum\Name = "Peter" ;OK, sinnlos ^^
Baum\X_Cord = Rand(0,100) ;Baum irgentwo platzieren...
Baum\Z_Cord = Rand(0,100) ;Baum irgentwo platzieren...
PositionEntity Baum\mesh,Baum\X_Cord,0,Baum\Z_Cord

;Suchen
For Baum = Each Baum
   If Baum\Name = "Hans" Then Exit
   ;Ist der name des aktuellen Baumes = Hans, wird die Schleife verlassen.
Next

;Löschen
Delete Baum


Ich persönlich denke mir die Types wie ne Liste, zu der ich per "new"
einen neuen Eintrag hinzufüge

Einfach mit ner Einkaufsliste vergleichen Wink

Für weitere fragen stehe ich gerne zur verfügung, morgen eigne ich mich
deinem Welt/Level Problem an (falls es bis dahin noch kein anderer getan
hat).

Grüßle:
Kernle
Mein PC: "Bluelight" - Xtreme Gamer PC [Video]
Meine Projekte: Cube-Wars 2010 [Worklog]
Anerkennungen: 1. Platz BCC #7 , 1. Platz BCC #22 , 3. Platz BAC #89
Ich war dabei: NRW Treff III, IV ; Frankfurter BB Treffen 2009

NightPhoenix

BeitragSa, Dez 30, 2006 12:00
Antworten mit Zitat
Benutzer-Profile anzeigen
krass wieviel hilfe man hier bekommt =)
danke the freak und vor allem danke Kernle 32DLL!

Also soweit denke ich sind das also Listen, die im Speicher "aktiviert" werden müssen (New...), wobei man dann mithilfe von Type\Field Befehle auf die einzelnen Punkte in den Listen zugreifen kann. Glaube ich

ich bräuchte zum entgültigen verstehen wirklich das beispiel mit meinem level laden! Smile

also das sollte irgendwie sowas einfaches sein wie:
erstes level
erstellen zweier würfel
farbe: rot (255,0,0)
scale: 2

zweites level
drei würfel
farbe: grün (0,255,0)
scale: 1

drittes level
fünf würfel
farbe: blau (0,0,255)
scale: 0.5


Nur ne kurze Erklärung zum späteren Spiel ^^
In meinem Spiel wird s dann so sein, dass nach dem level laden, völlig andere Texturen verwendet werden und völlig neue Objekte, mit unterschiedlicher Anzahl natürlich auch.
Von der Meer-Karte (1.Ebene mit lowlowlow poly vereinfachter Grafik und Zeitraffer) soll man auf die 2.Ebene "Meer" (Vogelperspektive direkt über dem schiff hohe details / reale Zeit und bei Bedarf dreifache) und wenn man an land andockt auf die 3.ebene (1st person / 3rd person mit hohen Details / auch reale Zeit) kommen.
Vom Schiff aus (2.Ebene) sieht man die Stadt zwar, aber nicht diese, sondern eine stark vereinfachte Stadt (lowpoly / low textur) an Land selbst wird aus der 800 Poly Stadt eine 80.000 Poly Stadt mit Hafen, Händlern, einer Werft, eine Taverne, usw.

Ich werde mich sobald ichs drauf hab an diese 3Ebenen rogrammierung ranmachen Wink

mfg.

BladeRunner

Moderator

BeitragSa, Dez 30, 2006 13:40
Antworten mit Zitat
Benutzer-Profile anzeigen
https://www.blitzforum.de/foru...246#101246

Vielleicht hilft dir das weiter.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92

5k41

BeitragSa, Dez 30, 2006 13:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Als erstes machst du ne datei die du level1.txt nennst und schreibst rein:
Code: [AUSKLAPPEN]
//Cube
Name  = Heinz <- erstmal sinnlos ;-)
Position = 10,10,10
Color  = 255,0,0
Scale  = 2
//Cube
Name = Udo
Position = 20,20,20
Color = 255,0,0
Scale  = 2

das gleiche machst du für level 2 und 3.
nun einen Type:
Code: [AUSKLAPPEN]
Type TObject
 Field CubeHandle
 Field Name$
 Field Scale
 Field red,green,blue
 Field x,y,z
End Type

im code öffnest du die Datei, liest mit Repeat ... Until ( EoF(file) ) eine Zeile nach der anderen aus, wendes Replace(zeile$," ","") darauf an, um alle Leerzeichen zur Formatierung zu löschen, wendest Lower (zeile$) darauf an, damit es egal ist ob man einen Befehl groß oder klein schreibt. Nun prüfst du ob zeile den wert "//cube" enthält, wenn das der Fall ist wird eine Neue instanz von TObject erstellt.
nun brauchst du eine solche Funktion:
Code: [AUSKLAPPEN]

Function stringSplitt$(strg$,char$,selection%)

 Local newstrg$=""
 Local count%=0
 Local charlength=Len(char$)

 If Instr(strg$,char$)>0 Then

  For i%=1 To Len(strg$)
 
   If Mid(strg$,i%,charlength)=char$ Then count%=count%+1:i=i+charlength

   If count%>selection%    Then Exit
   If count%=selection%    Then newstrg$=newstrg$+Mid(strg,i%,1)

  Next

 Else
  If selection=0  Then newstrg$=strg$
  If selection>0  Then newstrg$=""
 EndIf

 Return newstrg$

End Function

mit dieser kannst du einen string nur bis/von zu einem bestimmten Zeichen auslesen ( in unserem Fall dem "=" ). Alles was links vom gleich liegt ( stringSplitt(zeile$,"=",0) ) ist der Befehl alles rechts davon ( stringSplitt(zeile$,"=",1) der Wert für den Befehl. nun kannst du einfach mit If prüfen, ob alles was links vom gleich liegt position enthält, wenn ja, dann wendest du auf alles was rechts vom gleich liegt nochmal stringSplitt mit komma als Zeichen an, um nur X ( stringSplitt(rechtsvomgleich$,",",0) ) Y ( stringSplitt(rechtsvomgleich$,",",1) ) und Z ( na Wink ) herraus zu extrahieren und in X,Y und Z zu speichern, das gleiche machst du mit jedem Befehl. Nach der Laderoutine gehst du mit For Each alle Objecte durch, und weisst ihnen einen Cube ( CreateCube() ) zu, Positionierst ihn auf die Stelle setzt die Farbe etc.. Beim level Wechel mit For Each alle Types durchgehen, mit FreeEntity Cubehandle freigeben und dann den Type löschen, dann kannst du das nächste Level laden.

MfG[/code]
Projekte:
For a better World - Gesellschaftsspiel ( 100%)

User posted image

Gehe zu Seite 1, 2  Weiter

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group