Auflösung ändern

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Sereyanne

Betreff: Auflösung ändern

BeitragSo, Aug 17, 2008 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Frage: Stimmt es dass ich bei der BB2DDemo das Spiel neu starten muss um eine geänderte Auflösung zu übernehmen? Kann ich nicht direkt im Spiel umschalten?
Und: Ich hab gehört, es gibt einen Befehl, um kleine Bilder auf größere Auflösung stellen zu können. Dieser Befehl soll aber ein relativ schlechtes Ergebnis liefern und viele Ressourcen fressen. Heißt das, ich muss jedes Bild in jeder Auflösung vorliegen haben? Frisst nen Haufen Festplattenspeicher! Ich kann mir nicht vorstellen dass Spiele wie Crysis so arbeiten...

kriD

BeitragSo, Aug 17, 2008 23:55
Antworten mit Zitat
Benutzer-Profile anzeigen
hatten wir glaubich schonmal so ähnlich, wenn ich dein problem verstanden habe..

https://www.blitzforum.de/foru...highlight=
bitteschöön Wink

lg kriD
Wenn ich du wäre, wäre ich lieber ich!
 

sdjh

BeitragMo, Aug 18, 2008 12:37
Antworten mit Zitat
Benutzer-Profile anzeigen
zu a) weiß ich das leider nicht mehr. Hab die Demo schon seit Jahren nicht mehr genutzt. Es ist auf jeden Fall so, wenn das noch stimmt, dass der von Blitz benötigte Speicher für Grafiken durch Graphics gelöscht wird. Entweder du setzt Graphics vor dem Ladevorgang oder du speicherst alles in Banks und ließt die Bitmaps jedes Mal neu aus. Die Technik ist leider etwas veraltet.

zu b) ja! B2D unterstützt leider kein Hardwarerendering. Die Engine kann nur Daten aus dem RAM in den GrafikRAM schieben und somit deine Ausgabe erzeugen. Grafikkartenbeschleunigung wird erst ab B3D (BlitzMax) unterstützt. Damit kannst du Grafiken frei skalieren und rotieren ohne sie vorher vorrendern zu müssen, so wie es in Crisis auch gemacht wird.

Gruß
Simon

Sereyanne

BeitragMi, Aug 20, 2008 22:05
Antworten mit Zitat
Benutzer-Profile anzeigen
sorry dass ich mich so spät melde. Danke für eure Antworten! Dann muss ich mir wohl irgendwann mal die 3D Version zulegen.
 

da_poller

BeitragDo, Aug 21, 2008 9:00
Antworten mit Zitat
Benutzer-Profile anzeigen
in der 3d version kurz b3d kannst du auch nicht während des laufenden programmes die auflösung ändern..... da müstest du dir eine funktion bauen die alle grafiken nach dem neu setzen des graphics wieder in den ram lädt..
 

Dreamora

BeitragDo, Aug 21, 2008 9:13
Antworten mit Zitat
Benutzer-Profile anzeigen
was nicht sonderlich schwer ist wenn du deinen code gescheit strukturiert hast, dann wurde es nämlich schon beim ersten mal laden von einer funktion geladen die man einfach wieder aufrufen kann.

aber am einfachsten hat man einfach zwei unabhängige graphics:

1. Menu wo au die Grafikoptionen sind
2. Spiel selbst, wo keine Grafikoptionen existieren

dann hat man das problem nie Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Smily

BeitragDo, Aug 21, 2008 9:34
Antworten mit Zitat
Benutzer-Profile anzeigen
das laden in eine funktion zu packen, würde ich für alles andere als sauber halten.

Funktionen sollte man halt wörtlich nehmen und wirklich nur für funktionen machen, z.B. immer wieder kehrende triviale berrechnungen.

Bei BB ist man sonst dazu gezwungen, etliche globale variablen zu verwenden. Das lässt sich auch eleganter lösen Wink
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

Dreamora

BeitragDo, Aug 21, 2008 9:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Klingt als hättest du primär schludrigen Code wenn das laden in einer funktion bei dir keine saubere Lösung ist, sorry.

Da Laden der Media für einen zweck zum einen ein wiederkehrender, zum anderen ein abgeschlossener Task ist, ist es das paradebeispiel für etwas was man in eine funktion kapselt.

Die MediaVerwaltung ist so oder so global. Ob man die jetzt via Types regelt oder Array ist jedem selbst überlassen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Smily

BeitragDo, Aug 21, 2008 9:55
Antworten mit Zitat
Benutzer-Profile anzeigen
Auch wenn du es mir nicht glaubst, es gibt ausser deiner auch noch andere Vorstellungen eines Programmdesigns, die sauber sind Wink

Wenn man ganze programmteile in funktionen kapselt (game(), options(), showCredits()) müsste man auch mehrere Hauptschleifen ins programm machen. Das ist unsauber.

Include heisst das zauberwort

So sieht imho ein sauberer code aus:
Code: [AUSKLAPPEN]

include "inc/global.bmx"
include "inc/functions.bmx"
reloaddata = 1
repeat
   if reloaddata
      include "inc/initmedias.bmx"
      reloaddata = 0
   end if
   select gamemode
      case 0: ;Menu
         include "inc/menu.bmx"
      case 1: ;Optionsmenu
         include "inc/options.bmx"
      case 2: ;credits
          include "inc/credits.bmx"
       case 3: ;ende
          include "inc/end.bmx" ;evtl für end-splash.
   end select
   include "inc/paintall.bmx"
forever
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

Dreamora

BeitragDo, Aug 21, 2008 10:09
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich hasse es wenn leute Include für faulheit und grausiges codedesign verwenden!

Lang lebe BM wo man include nur noch da verwenden kann wos hingehört: An den anfang um andere sources zu includen, net mitten drin um include als gosub ersatz zu verwenden!!!

dein gehacke da hat mit sauberem codedesign nicht die hölle zu tun, das ist nur knapp über der stufe von goto gehacke.
Benutz mal google und schau nach "codedesign", "encapsulation" oder auch "modularisierung"
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Smily

BeitragDo, Aug 21, 2008 10:13
Antworten mit Zitat
Benutzer-Profile anzeigen
was hat das mit faulheit zutun?

Ausserdem funktioniert Include bei BM genauso wie bei BB.

Ich halte es einfach für übersichtlich.. zumindest besser als 10.000-Zeilen-Codebatzen in einer Funktion zu haben. Das macht das finden einer bestimmten Stelle wesentlich schwieriger.

(Übrigens: Höhere Sprachen wie Java und C(++) funktionieren nur nach diesem Prinzip, dass der Code in kleinen Übersichtlichen stücken auf mehrere Dateien aufgeteilt sind, also kann es so grausig wohl nicht sein)
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

Dreamora

BeitragDo, Aug 21, 2008 10:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Meines Wissens geht include unter BM (Strict und SuperStrict, ohne ist es nicht BM sondern Blitz Broken da die meisten optimierungen und funktionalitäten deaktiviert sind.) nur wenn es am anfang steht, so wie import auch.

Man teilt code in files auf richtig. Das nennt man Encapsulation oder Modularisierung.
Man teilt sie nach funktionalität oder Modulen auf.

Man hackt nicht einfach irgendwo code hin und included ihn dann. Das nennt man spaghetti code denn was du machst ist nichts anderes als Gosub in eine andere Datei.

Hättest du dir die Konzepte von C++ und Java für den zweck angesehen und verstanden, würdest du verstehen was ich meine und warum der missbrauch von Include für den fall hier grauenvoller Code ist.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Smily

BeitragDo, Aug 21, 2008 10:47
Antworten mit Zitat
Benutzer-Profile anzeigen
Zitat:
Meines Wissens geht include unter BM (Strict und SuperStrict, ohne ist es nicht BM sondern Blitz Broken da die meisten optimierungen und funktionalitäten deaktiviert sind.) nur wenn es am anfang steht, so wie import auch.

Man teilt code in files auf richtig. Das nennt man Encapsulation oder Modularisierung.
Man teilt sie nach funktionalität oder Modulen auf.

Man hackt nicht einfach irgendwo code hin und included ihn dann. Das nennt man spaghetti code denn was du machst ist nichts anderes als Gosub in eine andere Datei.

Hättest du dir die Konzepte von C++ und Java für den zweck angesehen und verstanden, würdest du verstehen was ich meine und warum der missbrauch von Include für den fall hier grauenvoller Code ist.


include geht in bmax auch unter superStrict in Schleifen.
Und ein include ist _kein_ goto in eine datei rein. Es ist einfach so, als würde man den Inhalt der Datei nehmen und da reinsetzen, wo das Include steht. (Genau das macht ja auch der compiler, deswegen geht bei bb ja auch kein "if blub then include "bla.bb"" bei mehrzeiligen dateien)
Eine Einzelne datei sollte für mich nicht mehr als 300 Zeilen Code haben. und eine Funktion nicht mehr als 20-30 zeilen (maximal!), ansonsten leidet die übersichtlichkeit.

C++ habe ich mir nicht angesehen, aber mit java arbeite ich wg meiner Ausbildung Aktiv seit so ziemlich einem Jahr.
Man kann die Konzepte von Java nicht 1:1 in BB-Übersetzen, da Objektorientierte und Imperative Programmierung zwei vollkommen verschiedene welten sind.
Aber mit Include kommt man entfern daran, die Idee, die dahinter steht auch in Bmax umsetzen zu können.
Lesestoff:
gegen Softwarepatente | Netzzensur | brain.exe | Unabhängigkeitserklärung des Internets

"Wir müssen die Rechte der Andersdenkenden selbst dann beachten, wenn sie Idioten oder schädlich sind. Wir müssen aufpassen. Wachsamkeit ist der Preis der Freiheit --- Keine Zensur!"
stummi.org
 

Dreamora

BeitragDo, Aug 21, 2008 11:14
Antworten mit Zitat
Benutzer-Profile anzeigen
Doch, wenn man include benutzt um nicht funktionen zu includieren sondern einfach code und das mitten zwischen anderem code dann ist das nichts anderes als ein GoSub (lies bitte was man schreibt, habe nicht Goto geschrieben)
Du springst in anderen code ohne das du etwas übergibst, sondern bleibst im jetzigen Variablenraum, modifizierst eben diesen Variablenraum und kommst zurück.

Das ist in keinster weise saubere programmierung, denn was passiert wenn du variablen namen änderst im programm wo du das include nutzt? genau es macht bumm.
Hättest du den included part aber sauber programmiert mit einer Funktion und festgelegten parametern für input - output, dann würds immer noch funktionieren, denn die funktion hat ihren eigenen variablenraum im unterschied zu included source / gosub welches im variablenraum ihres hosts lebt.

In Java gibt es kein konzept was auch nur im ansatz dem ähnelt was du da machst.
Java kennt nur code in methoden.
Wenn du es so häufig benutzt auf mehr oder weniger professionellem Level sollten dir die Konzepte von Modularisierung / Encapsulation eigentlich geläufig sein (sonst: Head First Java bzw. Von Kopf bis Fuss Java. Sehr gutes buch das einem auf effiziente weise dinge beibringt) und du solltest eigentlich auch wissen, das man funktionalität die gekapselt werden kann immer auch gekapselt wird.
Man schreibt keine Funktionen mit 3000 Zeilen, man packt logische blöcke in methoden und ruft diese auf.

Das aus mehreren Gründen:
1. Der block könnte anderswo noch gebraucht werden
2. Man kann dafür sorgen via UnitTests das die funktion genau das tut was sie soll. Auch beeinflusst sie den Code ausserhalb nicht, sofern man keine globalen Variablen ändert, das einzige was sie ändert ist etwas was via Return Rückgabe beim aufrufenden Code zugewiesen wird.
Danach muss man sie nie wieder angucken, denn sie war korrekt und wirds bleiben -> sehr viel weniger bug probleme, sehr viel effizientere Programmierung.

Mit deiner methode gibt es bestenfalls 1. Aber bezüglich 2 machst du die situation erheblich übler, denn wenn du den code der include änderst und der an mehr als einem ort included war erreichst du eine situation wo du bei jedem include ort andere probleme und unabhängige bugs erzeugen kannst dank des shared variablen raumes (-> Seiteneffekte)

Ich kann dir nur dringendst davon abraten so zu programmieren. Du wirst, sollte da je ein bug drin sein, schöne qualen leiden beim versuch sie zu fixen oder die funktionalität einfach so zu ändern (bei einer funktion wärs easy, da schreibt man ne zweite und ruft dann einfach die anstatt der originalen auf zum testen und da es wieder gekapselt ist gibts keine konsequenzen für den restlichen code!)

Aber belassen wirs dabei. Du scheinst es offensichtlich nicht verstehen zu wollen derzeit. Kommt noch nachdem dir in der Ausbildung jemand die Rübe abgedreht hat wegen Code Hacking statt Code Design. Oder spätestens wenn du 30h an einem bug arbeiten musstest der aus massiven Seiteneffekten entstanden ist wegen solcher Includes.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

The_Nici

BeitragDo, Aug 21, 2008 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Include wird jedoch vor dem kompilieren da reingeschnitten, man kann es NICHT mit GoSub vergleichen.
Ich inkludiere immer alle meine Funktionen an das Ende des Programms, und irgendwie fühle ich mich nicht wie eine Bestie des Bösen, und merkliche Unterschiede in meinem Karma lassen sich auch nicht feststellen. Hm.

EDIT:
<@BladeRunner> respekt, nici, wieder selbst demontiert
D:

FireballFlame

BeitragDo, Aug 21, 2008 17:57
Antworten mit Zitat
Benutzer-Profile anzeigen
The_Nici hat Folgendes geschrieben:
Include wird jedoch vor dem kompilieren da reingeschnitten, man kann es NICHT mit GoSub vergleichen.

Wüso? Ich weiß zwar nicht, wie der Compiler das macht, aber afaik kannst du auch genausogut alle Gosubs in deinem Programm durch den entsprechenden Code zwischen der Sprungmarke und Return ersetzen, ohne dass sich die Wirkung ändert.
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group