große bilder

Anfängerfragen zum Programmieren mit PureBasic.
Riacon
Beiträge: 61
Registriert: 21.01.2008 09:40

Beitrag von Riacon »

Code: Alles auswählen

Structure planet
  name$
  farbe.l
  radius.d
  masse.d
  x.d
  y.d
  speed.d
  richtung.d  ;in bogenmaß: 360° = 2*#pi
EndStructure


Global NewList planet.planet()


#Window_0=0
#ScrollArea_0=0

#zoom=100000  ;vergrößert/verkleinert alles
#lupe=50  ;vergrößert/verkleinert nur die planeten
#grav=6.67428e-11 ;"m^3/(kg*sec^2)"
#x_offset=50 ;verschiebt die x-achse richtg. bildsschirmmitte
#y_offset=400 ;verschiebt die y-achse richtg. bildsschirmmitte




Procedure Open_Window_0()
  If OpenWindow(#Window_0, 216, 0, 800, 600, "Gravitation",  #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    If CreateGadgetList(WindowID(#Window_0))
      ScrollAreaGadget(#ScrollArea_0, 0, 0, 1284, 748, 8192, 8192, 10)
      ImageGadget(1, 0, 0, 8192, 8192, ImageID(1))
      CloseGadgetList()
    EndIf
  EndIf
EndProcedure



If AddElement(planet())<>0
  planet()\name$="erde"
  planet()\farbe=RGB(0,50,250)
  planet()\radius=#lupe*(12756+12714)/4 ;mittlerer radius in km
  planet()\masse=5.974e23 ;kg
  planet()\x=1.496e8  ;mittlerer sonnenabstand in km
  planet()\y=0
  planet()\speed=29.78  ;km/sec
  planet()\richtung=2*#PI
EndIf

If AddElement(planet())<>0
  planet()\name$="sonne"
  planet()\farbe=RGB(250,250,0)
  planet()\radius=#lupe*1.3914e6/2 ;km
  planet()\masse=1.989e30 ;kg
  planet()\x=0
  planet()\y=0
  planet()\speed=0  ;km/sec
  planet()\richtung=0
EndIf

If AddElement(planet())<>0
  planet()\name$="mond"
  planet()\farbe=RGB(75,75,75)
  planet()\radius=#lupe*3476/2 ;km
  planet()\masse=7.349e22 ;kg
  planet()\x=1.496e8+(363200+405500)/2
  planet()\y=0
  planet()\speed=1.023+29.78  ;km/sec (rel. zur sonne)
  planet()\richtung=2*#PI
EndIf

If AddElement(planet())<>0
  planet()\name$="venus"
  planet()\farbe=RGB(200, 200, 200)
  planet()\radius=#lupe*(12103.6+12103.6)/4 ;km
  planet()\masse=4.869e24 ;kg
  planet()\x=108210000
  planet()\y=0
  planet()\speed=35.02  ;km/sec
  planet()\richtung=2*#PI
EndIf

If AddElement(planet())<>0
  planet()\name$="merkur"
  planet()\farbe=RGB(75,75,75)
  planet()\radius=#lupe*(4879+4879)/4 ;km
  planet()\masse=3.302e23 ;kg
  planet()\x=57910000
  planet()\y=0
  planet()\speed=47.87  ;km/sec
  planet()\richtung=2*#PI
EndIf

If AddElement(planet())<>0
  planet()\name$="jupiter"
  planet()\farbe=RGB(200, 100, 50)
  planet()\radius=#lupe*(142984+133708)/4 ;km
  planet()\masse=1.899e27 ;kg
  planet()\x=778570000
  planet()\y=0
  planet()\speed=13.07  ;km/sec
  planet()\richtung=2*#PI
EndIf

If AddElement(planet())<>0
  planet()\name$="mars"
  planet()\farbe=RGB(200, 50, 50)
  planet()\radius=#lupe*(6794+6750)/4 ;km
  planet()\masse=6.419e23 ;kg
  planet()\x=227920000
  planet()\y=0
  planet()\speed=24.13  ;km/sec
  planet()\richtung=2*#PI
EndIf




;******************* main ********************
;open_window_0()

;Repeat
;StartDrawing(WindowOutput(0))
      
;ResetList(planet())
;While NextElement(planet())
;  Circle((planet()\x)/#zoom+#x_offset, planet()\y/#zoom+#y_offset, planet()\radius/#zoom, planet()\farbe)
;Wend
    
;StopDrawing()
;Until WaitWindowEvent() = #PB_Event_CloseWindow
;****************** main **********************


;****************** main **********************
CreateImage(1, 8192, 1000, #PB_Image_DisplayFormat)

ResetList(planet())
StartDrawing(ImageOutput(1))
While NextElement(planet())
  Circle((planet()\x)/#zoom+#x_offset, planet()\y/#zoom+#y_offset, planet()\radius/#zoom, planet()\farbe)
Wend
StopDrawing()

open_window_0()
Repeat: Until WaitWindowEvent() = #PB_Event_CloseWindow
;****************** main **********************


End
direkt aufs fenster zu zeichnen klappt irgendwie nicht. deswegen mit einem imagegadget. das sonnensystem ist halt bloß ein bißchen groß. sprites klingt interessant, muß ich mir mal anschauen.

irgendwann soll sich das ganze natürlich auch drehen, am besten in 3d
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

yo, dann nimm nen WindowedScreen und Sprites, da fährste besser,
und bist gleich auf ner Game-Oberfläche die ganz anders
programmiert werden muss als ein reines Fensterle.

um direkt auf ein Window zu zeichnen, musst du ein Redraw-Callback mit einbaun,
der also bei Bedarf deinen krempel neu zeichnet.
auch ein ImageGadget könntest du ja nicht komplett darstellen,
also bräuchtest du ja wohl sowieso ne ScrollArea,
dort könntest du dann doch auch mehrere Images reinpacken,
die jeweils nur die Planeten darstellen.

aber wenn du das auf nem (Windowed-)Screen machst,
ist es insgesamt wesentlich einfacher.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Benutzeravatar
hardfalcon
Beiträge: 3447
Registriert: 29.08.2004 20:46

Beitrag von hardfalcon »

Darf man fragen, welchen Zweck das Ganze eigentlich haben wird? Ausdrucken geht nicht (es sei denn, du druckst auf Endlospapier, allerdings schaut ein 10 Meter langer und 20cm breiter Ausdruck vielleicht etwas lächerlich aus). Um es maßstabsgetreu darstellen zu können, müsstest du vermutlich die halbe 5th Avenue mit Displays zukleistern (zumindest wenn man die Erde da noch erkennen soll).
Ansonsten könnte ich mir höchstens noch vorstellen, dass du dem Benutzer deines Programms die Entfernung anhand der Stunden, während der er rumscrollen muss, um von der Sonne zur Erde zu kommen, veranschaulichen willst... <)

Ist nicht böse gemeint, aber warum tust du dir den ganzen Aufwand denn letztendlich an? :?
Riacon
Beiträge: 61
Registriert: 21.01.2008 09:40

Beitrag von Riacon »

ich hab vor 30 jahren mal ein mondlandespiel auf einem alten wang gemacht. dann hab ich verbessert und verbessert.. bis es nicht mehr funktionierte.

ich geb ja nicht auf :-D
Benutzeravatar
Xaby
Beiträge: 2144
Registriert: 12.11.2005 11:29
Wohnort: Berlin + Zehdenick
Kontaktdaten:

Beitrag von Xaby »

Ich schätze mal Google Earth hat auch nur ein ganz großes Bild für die gesamte Erde :mrgreen:

Wirst das schon schaffen. Einfach die Erde auf ein Sprite zeichnen, dann die Sonne auf ein größeres Spreit und die Entfernung dazwischen brauchste ja nicht zeichnen. Da kommen Sternsprites hin /:-> :allright:
Kinder an die Macht http://scratch.mit.edu/
Kaeru Gaman
Beiträge: 17389
Registriert: 10.11.2004 03:22

Beitrag von Kaeru Gaman »

Xaby hat geschrieben:Ich schätze mal Google Earth hat auch nur ein ganz großes Bild für die gesamte Erde
BULL! :roll:

@Riacon
"Mondlandespiel" klingt schon mal weit einfacher.
ne Erde von ~6400pix müßtest du mit ner großgezoomten Sprite3D schon hinbekommen.
den Mond dann ~1700pix auf die selbe weise,
und mit nem Mittelpunktabstand von ~384000pix darstellen,
also in 375 bildscheirmseiten entfernung...

bloß, treffen kann man immer so schlecht, wenn man mit Draufsicht arbeitet...
im gegensatz zur realität kannst du in 400km entfernung vorbeifliegen und siehst es nicht einmal.

sowas macht man dann doch lieber kapitelweise getrennt,
also die eigentliche Landung in nem ganz anderen Maßstab als den Flug,

oder gleich in 3D.
Der Narr denkt er sei ein weiser Mann.
Der Weise weiß, dass er ein Narr ist.
Antworten