In 2d Spiel, 3d Effekte einbauen!

Anfängerfragen zum Programmieren mit PureBasic.
Zero_Cool
Beiträge: 84
Registriert: 04.12.2004 15:14

In 2d Spiel, 3d Effekte einbauen!

Beitrag von Zero_Cool »

Hallo Zusammen,

Habe mal eine prinzipielle Frage, ich arbeite jetzt schon eine Weile mit PureBasic, nun würde ich gerne mal etwas mehr versuchen, als "nur" Fenster zu gestalten. Ich würde mich gerne mal an ein Spiel wagen, in meiner Frage beziehe ich mich auf ein Spiel, welches etwa diesem Tutorial ( http://www.purearea.net/pb/download/tut ... E-Kurs.zip ) entspricht.

Es handelt sich um ein ganz normales 2d Shooter Spiel!

- Ist es möglich in ein 2d Spiel, auch 3d Objekte einzubinden? Soll heissen, wenn ich ein Weltraum Spiel erstelle welches 2d ist, kann ich da z.b. 3d Asteorieden einfügen oder mein Raumschiff 3d gestalten? Wenn ja welche Befehle sind dafür vorgesehen?

- Lässt sich der Hintergrund scrollen? Ist es möglich das der Hintergrund nicht statisch immer der gleiche ist, sondern das verschiedene Hintergründe durchlaufen? Wenn ja welche Befehle sind dafür vorgesehen?

- Kann ich in einem laufenden 2d Spiel zusätzlich am Bildschirm- Rand einen kleinen rechteckigen Film gleichzeitig laufen lassen?

Ich möchte mich nur mal ein wenig Informieren, und mir die Befehle mal ansehen, um genau zu schauen, was ich mir da vorgenommen habe :-)

Danke und have a nice day! Gruss Phil
Chance favors the prepared mind - Havrilla Design - My Gfx
Benutzeravatar
Vallan
Beiträge: 223
Registriert: 20.01.2006 19:34
Kontaktdaten:

Beitrag von Vallan »

Nehme an du meinst weaponnez 2 oder?


- Ist es möglich in ein 2d Spiel, auch 3d Objekte einzubinden?

Klar, allerdings ist die frage was du damit machen willst. Wenn du z.b. ogre verwendest dann wäre das sehr kompliziert.
Wenn du die objekte nur "Zeigen" willst dann kann man einfach ein bild davon machen und mit Sprite3D drehen oder zoomen

- Lässt sich der Hintergrund scrollen? Ist es möglich das der Hintergrund nicht statisch immer der gleiche ist, sondern das verschiedene Hintergründe durchlaufen? Wenn ja welche Befehle sind dafür vorgesehen?

Der hintergrund scrollt automatisch. du hast viele Reihen von dem Gleichen bild. z.b. kannst du einfach ein anderes bild nehmen, oder auf dem 1. bild rummahlen.

Ich würde dir empfehlen einfach mal was auszuprobieren, so hab ich auch PB gelehrnt


//Edit: Hab ich übersehen :oops:


- Kann ich in einem laufenden 2d Spiel zusätzlich am Bildschirm- Rand einen kleinen rechteckigen Film gleichzeitig laufen lassen?

Ja du initialisirst den Film normal und nimst "RenderMovieFrame()" in der hilfe sollte das genauer erklärt sein.
Zuletzt geändert von Vallan am 17.01.2007 15:17, insgesamt 1-mal geändert.
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Ist es möglich in ein 2d Spiel, auch 3d Objekte einzubinden?
nein.

> Soll heissen, wenn ich ein Weltraum Spiel erstelle welches 2d ist, kann ich da z.b. 3d Asteorieden einfügen oder mein Raumschiff 3d gestalten?
ja.

du kannst mit einem 3D-modeller 3D-Objekte erzeugen und rendern.
die erzeugten grafiken bindest du ein wie alle anderen sprites auch.

> Wenn ja welche Befehle sind dafür vorgesehen?
spritebefehle.

> Lässt sich der Hintergrund scrollen?
natürlich.

> Ist es möglich das der Hintergrund nicht statisch immer der gleiche ist, sondern das verschiedene Hintergründe durchlaufen?
natürlich.

> Wenn ja welche Befehle sind dafür vorgesehen?
spritebefehle.

und btw.
Mach deine Signatur bitte kleiner!
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Zero_Cool
Beiträge: 84
Registriert: 04.12.2004 15:14

Beitrag von Zero_Cool »

Wow, das geht ja fix :-) Danke für die Antwort! Hoffe die Signatur ist so okay!

Jep, das stimmt, ich bin auch schon am probieren, aber diese Fragen haben sich gerade als erstes aufgedrängt :-)

Ganz klar ist mir das noch nicht, ich versuche nur raus zu finden, wie kompliziert der Umstieg ist...

Das heisst, ich kann keine 3d Modelle direkt einfügen. Ich muss also die 3d Objekte in Maya vor-rendern und in Bilder abspeichern. Die Abfolge der Bilder kann ich dan wiederum mit Sprite- Befehlen in einem 2d Spiel zum Einsatz bringen. Korrekt?

Soweit mir bekannt verwendet man folgenden Befehl um Hintergründe darzustellen:

UsePNGImageDecoder()
LoadSprite(#Sprite_Back, "gfx/bg.png")
DisplaySprite(#Sprite_Back, 0, 0)

Nun, da das ganz in einer Schleife ist, wie gestalte ich dan das so, dass das eine Bild schön in das nächste übergeht?

Wenn ich meinem Raumschiff nun gerne einen 3d Effekt verleihen möchte, wie würdet ihr das machen? Mit RenderMovieFrame oder gibts da noch andere möglichkeiten?

Danke und Gruss Phil
Chance favors the prepared mind - Havrilla Design - My Gfx
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

> Hoffe die Signatur ist so okay!
:allright:


> Die Abfolge der Bilder kann ich dan wiederum mit Sprite- Befehlen in einem 2d Spiel zum Einsatz bringen. Korrekt?
genau. :D


> Nun, da das ganz in einer Schleife ist, wie gestalte ich dan das so, dass das eine Bild schön in das nächste übergeht?

vorbereitung oder laufzeit?

vorbereiten musst du natürlich, mehrere bilder zu haben die nahtlos aneinander passen.

zur laufzeit musst du dann halt immer ein stück mehr anzeigen,
als auf den screen passt, damit keine lücken entstehen.

...ich hack mal grad ein beispiel.... ;)
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
Vallan
Beiträge: 223
Registriert: 20.01.2006 19:34
Kontaktdaten:

Beitrag von Vallan »

Also, Das ganze wird ja vermutlich reihe für reihe aufgebaut. Um einen Übergang zu gestalten brauchst du also entweder ein anderes Sprite oder du machst das mit einem alphasprite.

Ich vermute das der Hitergrund in dieser schleife gerendert wird:

wenn du nur 1 bild als hintergrund hast dann schiebst du das 1. bild einfach nach links raus und lässt das andere von rechts reinkommen.

x= 800
repeat

...
if x > 0
x-1
endif
DisplaySprite(#1 , x, 0)
DisplaySprite(#2 , 800 + x, 0)


...

until

wobei die bilder und der screen hier von mir mit der breite 800 angenommen wurden.
Zero_Cool
Beiträge: 84
Registriert: 04.12.2004 15:14

Beitrag von Zero_Cool »

Ich weiss eine blöde Frage, aber ich habe den entsprechenden Befehl nicht gefunden. Mit welchem Befehl kann man mehrere Bilder nacheinander darstellen, sodass es daruas eine "Animation" gibt? GIF wird ja nicht unterstützt :oops:

Eigentlich habe ich mir das so gedacht, das ich zum Beispiel 20 Bilder vorbereite, diese sollten vertikal durchlaufend nahtlos aneinander dargestellt werden. Blöd gesagt, es sollte so sein, dass mein Hintergrund Bild pro Sekunde 10 pixel nach unten geschoben wird, und die 10 Pixel welche oben Fehlen, werden nahtlos durch das neue Bild ersetzt.

EDIT: Ich teste gleich mal was ich hin bekomme :-) DANKE!

Danke und Gruss Phil
Chance favors the prepared mind - Havrilla Design - My Gfx
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Yay, mein Ansatz wäre (auch wenn ich advon nicht so wirklich die AHnung habe, was Spiele angeht :oops: )
Die ganzen Sprites laden, und die einzelnen ID's in ein Array packen.

Da du ja weißt, wie groß dein Array ist, lässt du jetzt bei jedem Schleifendurchlauf das nächste Bild anzeigen. Ist die ANimation am ENde, setzt du die ANimationsvariable wieder auf 0 und das Array beginnt von Vorne.

Ich hoffe, das Prinzip ist verständlich- ich bin nämlich kein Gameprogrammierer :oops: :freak:

Gr33tz
Tafkadasom2k5
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

hm... animation also auch noch... ok...

zuerst mal das hintergrundscrolling so weit, ist im prinzip ne tile-engine,
nur das hier mal jedes tile identisch aussieht....

Code: Alles auswählen

InitSprite()
InitKeyboard()
OpenWindow(0,0,0,640,480,"Background-Tiles-Demo", #PB_Window_ScreenCentered | #PB_Window_SystemMenu)
OpenWindowedScreen(WindowID(0),0,0,640,480,0,0,0)

 CreateSprite(0,80,80)
 StartDrawing(SpriteOutput(0))
   Box(0,0,80,80,$401020)
   For n=0 To 79
     Plot(n,Random(79),Random($FFFFFF))
   Next
 StopDrawing()

 CreateSprite(1,80,80)
 StartDrawing(SpriteOutput(1))
   Box(0,0,80,80,$FF00FF)
   For n=0 To 60
     LineXY(39, n,79-n/2,79,RGB(120+2*n,60+n,30+n/2))
     LineXY(40, n,   n/2,79,RGB(120+2*n,60+n,30+n/2))
   Next
 StopDrawing()
TransparentSpriteColor(1,$FF00FF)


BackX.l = 0
BackY.l = 0

Repeat
  ExamineKeyboard()
  event = WindowEvent()
  ClearScreen(0) 

  If KeyboardPushed(#PB_Key_Right)
    BackX -1 : If BackX <  0 : BackX = 79 : EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Left)
    BackX +1 : If BackX > 79 : BackX =  0 : EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Down)
    BackY -1 : If BackY <  0 : BackY = 79 : EndIf
  EndIf
  If KeyboardPushed(#PB_Key_Up)
    BackY +1 : If BackY > 79 : BackY =  0 : EndIf
  EndIf

  For t=0 To 6        ; 480/8 = 6 , einer mehr = 7
    For n=0 To 8      ; 640/8 = 8 , einer mehr = 9
      DisplaySprite(0, 80*n -80 + BackX, 80*t -80 + BackY)
    Next
  Next

  DisplayTransparentSprite(1,280,360)

  FlipBuffers()
Until event = #PB_Event_CloseWindow
zu der animation:
im grunde so wie Tafka gesagt hat.
du musst halt bedenken, dass du auf nem screen immer nur eine momentaufnahme darstellst.
wenn sich irgendwas verändert, dann ändert sich das von einem hauptschleifendurchlauf zum nächsten.

so wie in dem beispiel per cursortasten die verschiebe-koordinaten für den background geändert werden.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Zero_Cool
Beiträge: 84
Registriert: 04.12.2004 15:14

Beitrag von Zero_Cool »

Hello

Danke für die Hilfe. Ich verstehe noch nicht alles, aber der Sinn ist ja, das ganze selbst raus zu finden :-) Wobei, ehrlich gesagt, ich verstehe den Ansatz der Animation mit Array und Id's aber wie ich das genau umsetzten soll, da sehe ich noch schwarz :oops: Habt Ihr noch einen kleinen ergänzenden Tipp für mich wie ich das lösen kann?

@ Kaeru Gaman: Danke für das Beispiel, das hilft mir bestimmt!

Gruss Phil
Chance favors the prepared mind - Havrilla Design - My Gfx
Antworten