Von C nach C++

Programmieren in C++
Autor
Nachricht
Benutzeravatar
LecramOS
6 Bit
Beiträge: 121
Registriert: Sa Feb 20, 2010 21:45
Wohnort: Pandora.

Re: Von C nach C++

#16 Beitrag von LecramOS » Sa Mär 27, 2010 10:04

Hallo....
Wie immer hilfreich. :yes:

Vor allem die Aussage, dass man SDL_SetVideoMode überall nutzen kann und nicht nur am Anfang beim initialisieren von
SDL hat geholfen . Ich dachte man müsste, das immer in der Anfangs Gegend vom Code einbauen. Habe ich im Tutorial so gesehen, genau wie in diesem einen Buch vom Helmut Ehrlenkötter, wo er das public: nach unten setzt und in dem anderen Buch steht das wieder oben ,, :huh: ,, das verwirrt alles manchmal ein wenig :-D

Na ja.. egal... weiter im Text. RTFM

Ich hatte schon bei der Initialisieren Funktion(SDL_Initialisieren.cpp) von SDL einen Rückgabe Wert eingebaut , der SDL_SetVideoMode enthält(return BILDSCHIRM)
und diesen Wert dann als Parameter jeder anderen Funktion übergeben die es braucht. klappt so auch, doch ist ein wenig umständlich.

Das ich SDL_SetVideoMode in der Globalen Variablen initialisieren kann wusste ich und habe ich auch schon gemacht gehabt, nur komischerweise verhindert dieser Globale Zeiger wenn ich ihn dann in SDL_BlitSurface(bild,NULL,Hier der Zeiger,NULL) einsetzte, bei SDL_FULLSCREEN flag, den Vollbild Modus(Bildschirm bleibt Schwarz) und keine Fehlermeldung.

Wenn ich aber nun SDL_Set VideoMode direkt in der Funktion einbaue, wo ich es auch benötige und es dort auch nutze gibt es kein Problem mit dem Vollbild Modus.

Deshalb auch meine vieeelen Fragezeichen und komischen Versuche :-??? .

SDL_SetVideoMode ist in der GlobalenVariablen.h als "static SDL_Surface*" deklariert.

Ich weiß nicht, warum es in der GlobalenVariablen Header Datei Probleme mit SDL_FULLSCREEN gibt .

Deshalb dachte ich mir ja, dass vielleicht ein Zeiger auf den Zeiger in der GlobalenVariablen.h helfen würde.

GLOBALER HEADER:

Code: Alles auswählen

/*
 * ASDL_Globale:Variablen.h
 *
 * Globale Variablen
 *
 *  Created on: 17.03.2010
 *      Author: lecramos
 */

#ifndef _ASDL_GLOBAL_
#define _ASDL_GLOBAL_




#include <SDL/SDL.h>


// Bildschirm Daten.
const int BILDSCHIRM_WEITE     = 800 ;
const int BILDSCHIRM_HOEHE     = 480 ;
const int BILDSCHIRM_FARBTIEFE =  16 ;


// Bildschirm Video Modus.
static SDL_Surface *bildschirm  = SDL_SetVideoMode(BILDSCHIRM_WEITE,BILDSCHIRM_HOEHE,BILDSCHIRM_FARBTIEFE,SDL_SWSURFACE | SDL_FULLSCREEN );


// Maximale Lautstärke.
static int LAUTSTAERKE_MAXIMUM = 128 ;




#endif //_ASDL_GLOBAL_
:-???
Na und !!!

Benutzeravatar
Evil Azrael
6 Bit
Beiträge: 109
Registriert: Mi Jan 20, 2010 22:14
Wohnort: Rheinkilometer 666 & hinter Heidelberg
Kontaktdaten:

Re: Von C nach C++

#17 Beitrag von Evil Azrael » Sa Mär 27, 2010 23:27

Code: Alles auswählen

static SDL_Surface *bildschirm  = SDL_SetVideoMode(BILDSCHIRM_WEITE,BILDSCHIRM_HOEHE,BILDSCHIRM_FARBTIEFE,SDL_SWSURFACE | SDL_FULLSCREEN );
das würde ich nicht machen. Das Problem ist es, das du nicht weiss in welcher Reihenfolge globale Variablen initialisiert werden, also da kann vorher irgendwas anderes drin stehen. Mit = 0 und der Initialisierung in einer Funktion bist auf der sicheren Seite. Die Sache ist die, für die Variable wird ein Stück Speicher in der Exe/DLL, was auch immer reserviert, die kann der Compiler direkt mit der 0 belegen, aber die Funktion muss er aufrufen und in einem Programm könnten mehrere globale Variablen enthalten sein, die über Funktionen initialisiert werden. Deswegen ist dieses Singleton Pattern sicherer.

Mit der Reihenfolge public/protected/private ist es genauso wie HolySmoke geschrieben hat. Wenn du etwas programmierst das andere benutzen sollen/können, dann sollte die Reihenfolge eingehalten werden. Die drei Modi heissen so viel "Das interessiert dich"/"Das interessiert dich bedingt"/"Das geht dich nix an". Der Nachteil ist halt, das du bspw. Getter für Variablen nicht im der Klassen Deklaration implementieren kannst, weil der im public Teil die Variable noch nicht kennt.
Gleicher Grund auch für Englisch. Es ist auch irgendwie schwer sauber Deutsch durchzuhalten, früher oder später wirst du zum Sprachpanscher ;) . Aber wenn das Projekt wirklich nur für dich ist, dann mach wie du lustig bist.
War, War never changes... The end of the world occurred pretty much as we had predicted. Too many humans, not enough space or resources to go around. The details are trivial and pointless, the reasons, as always, purely human ones. A great cleansing, an atomic spark struck by human hands, quickly raged out of control, spears of nuclear fire rained from the skies, continents were swallowed in flames and fell beneath the boiling oceans....

God bless Germany! Bild

Benutzeravatar
LecramOS
6 Bit
Beiträge: 121
Registriert: Sa Feb 20, 2010 21:45
Wohnort: Pandora.

Re: Von C nach C++

#18 Beitrag von LecramOS » So Mär 28, 2010 02:11

Alles Klar...Danke mal wieder :-)

Mal was anderes, was mir auch mal gerade so aufgefallen ist.

Wenn ich in SDL ein Bild dekrementiere oder inkrementiere egal auf welche Achse Flackert es immer ein gaaanz kleinen wenig. Und es kommt mir auch so vor, als wenn es nicht ganz flüssig läuft, also es ruckelt immer ein kleeeines bisschen.

Ich meine mal gehört zu haben , dass das Normal sein soll, weil Linux eigentlich nicht für Spiele ausgelegt ist und es deshalb wohl auch Probleme mit zmb. Super Tux geben soll. Also Super Tux soll wohl auch nicht richtig "Sauber/Flüssig" laufen.

Auf jeden Fall nervt mich das ein bisschen. Ich Blitte mein Bild so... SDL_BlitSurface(BILD,SDL_RECT,BILDSCHIRM,SDL_RECT) und benutze dann SDL_Flip(BILDSCHIRM)....

Ist das normal und kann man was gegen dieses unsaubere Laufen des Programms tun :-???
Na und !!!

Benutzeravatar
Evil Azrael
6 Bit
Beiträge: 109
Registriert: Mi Jan 20, 2010 22:14
Wohnort: Rheinkilometer 666 & hinter Heidelberg
Kontaktdaten:

Re: Von C nach C++

#19 Beitrag von Evil Azrael » So Mär 28, 2010 15:10

LecramOS hat geschrieben:Wenn ich in SDL ein Bild dekrementiere oder inkrementiere egal auf welche Achse Flackert es immer ein gaaanz kleinen wenig. Und es kommt mir auch so vor, als wenn es nicht ganz flüssig läuft, also es ruckelt immer ein kleeeines bisschen.
[...]
SDL_Flip(BILDSCHIRM)....
Wie inkrementiert oder dekrementiert denn ein Bild? ;) Sicher das du Doublebuffering initialisiert hast? In dem Code oben steht nix davon.
War, War never changes... The end of the world occurred pretty much as we had predicted. Too many humans, not enough space or resources to go around. The details are trivial and pointless, the reasons, as always, purely human ones. A great cleansing, an atomic spark struck by human hands, quickly raged out of control, spears of nuclear fire rained from the skies, continents were swallowed in flames and fell beneath the boiling oceans....

God bless Germany! Bild

Benutzeravatar
LecramOS
6 Bit
Beiträge: 121
Registriert: Sa Feb 20, 2010 21:45
Wohnort: Pandora.

Re: Von C nach C++

#20 Beitrag von LecramOS » So Mär 28, 2010 15:29

Doublebuffer soll doch bei SDL_Flip(BILDSCHIRM) automatisch dabei sein . oder ?

Das muss man dann doch nicht noch als flag schreiben. SDL_DOUBLEBUF . oder ?

Ich habe es aber testweise eingefügt, hat aber trotzdem nichts gebracht.. Ist immer noch unverändert am flimmern und ein bissl am ruckeln.

:-???
Na und !!!

Benutzeravatar
Evil Azrael
6 Bit
Beiträge: 109
Registriert: Mi Jan 20, 2010 22:14
Wohnort: Rheinkilometer 666 & hinter Heidelberg
Kontaktdaten:

Re: Von C nach C++

#21 Beitrag von Evil Azrael » So Mär 28, 2010 16:27

Ne, eben nicht. Mit SDL_Flip sagst du ihm, das er den Backbuffer mit dem Frontbuffer vertauschen soll, was nur geht, wenn Double Buffering aktiviert ist und Hardware Surface aktiviert sind. http://sdl.beuc.net/sdl.wiki/SDL_Flip
Flackern oder ruckeln kann aber auch zig andere Ursachen haben.
War, War never changes... The end of the world occurred pretty much as we had predicted. Too many humans, not enough space or resources to go around. The details are trivial and pointless, the reasons, as always, purely human ones. A great cleansing, an atomic spark struck by human hands, quickly raged out of control, spears of nuclear fire rained from the skies, continents were swallowed in flames and fell beneath the boiling oceans....

God bless Germany! Bild

Benutzeravatar
LecramOS
6 Bit
Beiträge: 121
Registriert: Sa Feb 20, 2010 21:45
Wohnort: Pandora.

Re: Von C nach C++

#22 Beitrag von LecramOS » So Mär 28, 2010 18:34

Danköö. :ph34r:

Bei mir läuft es auf jeden Fall nicht richtig flüssig. Es handelt sich nicht um so ein typisches Flackern wie man es von bewegten Bildern kennt wenn man keinen Doublebuffer benutzt. So schlimm ist das nicht. Aber man merkt es, wenn man drauf achtet. Ich glaube das ist SDL typisch aber genau weiß ich es nicht. Ich habe programmiert wie immer und es ist überall so, dass es gaaanz minimal manchmal ruckelt und bei einen Bewegten Schwarzen Bild mit weißer Schrift flackert dann diese Schrift ein bisschen. Also kein typisches "nicht Doublebuffer benutzt" flackern.

:-???
Na und !!!

Antworten

Zurück zu „C++“

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast