Von C nach C++

LecramOS

Newbie
Joined
Feb 20, 2010
Messages
121
Age
35
Location
Pandora.
LOCATION
Pandora.
Hi und danke nochmals für den Ratschlag mit den IDE Wechsel.
Eclipse ist der Hammer :)

Ich wollte nun mal Fragen, ob es sich bei dem folgenden kleinen Codeabschnitt um OOP handelt und ob ich
damit soweit auf den richtigen weg bin von C zu C++ zu wechseln.

Ich habe Hier auch das Problem der Globalen Variablen abgeschafft und hoffe, dass es nun der OOP Logik gerecht wird.

main.cpp
Code:
<i>
</i>#include "fSDL_Initialisieren_Pandora.h"


int main(int argc, char *argv[]) {

    fSDL_Initialisieren_Pandora() ;

return 0 ;
}
Klasse.
kSDL_Initialisieren.h
Code:
<i>
</i>#ifndef _KSDL_INIT_
#define _KSDL_INIT_



#include <SDL/SDL.h>

class kSDL_Initialisieren {

 private:

	 int BILDSCHIRM_WEITE     ;
	 int BILDSCHIRM_HOEHE     ;
	 int BILDSCHIRM_FARBTIEFE ;

	 SDL_Surface *bildschirm  ;


 public:

	 kSDL_Initialisieren() ;
	~kSDL_Initialisieren() ;

	 void gebeBILDSCHIRM_WEITE     (int BILD_W){BILDSCHIRM_WEITE     = BILD_W ; }
	 void gebeBILDSCHIRM_HOEHE     (int BILD_H){BILDSCHIRM_HOEHE     = BILD_H ; }
	 void gebeBILDSCHIRM_FARBTIEFE (int BILD_F){BILDSCHIRM_FARBTIEFE = BILD_F ; }

	 void gebeBildschirm   (SDL_Surface *screen){bildschirm = screen          ; }


	 int nehmeBILDSCHIRM_WEITE() const     {return BILDSCHIRM_WEITE     ; }
	 int nehmeBILDSCHIRM_HOEHE() const     {return BILDSCHIRM_HOEHE     ; }
	 int nehmeBILDSCHIRM_FARBTIEFE() const {return BILDSCHIRM_FARBTIEFE ; }

	 SDL_Surface *nehmeBildschirm() const  {return bildschirm           ; }

};

kSDL_Initialisieren::kSDL_Initialisieren() {
	 BILDSCHIRM_WEITE     = NULL ;
     BILDSCHIRM_HOEHE     = NULL ;
	 BILDSCHIRM_FARBTIEFE = NULL ;

	 bildschirm           = NULL ;
}

kSDL_Initialisieren::~kSDL_Initialisieren() {

}



#endif //_KSDL_INIT_
Funktions Prototyp.
fSDL_Initialisieren_Pandora.h
Code:
<i>
</i> 
#ifndef _FSDL_INIT_PANDORA_
#define _FSDL_INIT_PANDORA_



void fSDL_Initialisieren_Pandora() ;



#endif // _FSDL_INIT_PANDORA_
Funktion.
fSDL_Initialisieren_Pandora.cpp
Code:
<i>
</i>
#include <iostream>
#include <cstdlib>
#include <SDL/SDL.h>
#include <SDL/SDL_ttf.h>
#include <SDL/SDL_mixer.h>
 using namespace std ;

#include "kSDL_Initialisieren.h"


void fSDL_Initialisieren_Pandora() {

	 // Erzeugt ein Objekt
	 kSDL_Initialisieren Pandora ;

	 // Setzt die Variablen
     Pandora.gebeBILDSCHIRM_WEITE(800)    ;
     Pandora.gebeBILDSCHIRM_HOEHE(480)    ;
     Pandora.gebeBILDSCHIRM_FARBTIEFE(16) ;

     // Bei exit() wird SDL_Quit ausgeführt
     atexit(SDL_Quit) ;

     // Initialisiert SDL
     if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {
    	cout << "Fehler beim Initialisieren von SDL" ;
    	exit(1) ;
     }

     // Setzt den Video Mode
     Pandora.gebeBildschirm(SDL_SetVideoMode(Pandora.nehmeBILDSCHIRM_WEITE(),Pandora.nehmeBILDSCHIRM_HOEHE(),
    		                                 Pandora.nehmeBILDSCHIRM_FARBTIEFE(),SDL_SWSURFACE)) ;
     if(Pandora.nehmeBildschirm() == NULL) {
    	cout << "Fehler beim setzen von Video" << endl ;
    	exit(1) ;
     }

     // Initialisiert die TTF Schrift
     if(TTF_Init() < 0) {
    	cout << "Fehler beim Initialisieren von TTF Schrift" << endl ;
    	exit(1) ;
     }

     // Initialisiere SDL_mixer ,frequenz,Sound_Format,Channels(Stero || Mono),Max Datei Größe.
     if(Mix_OpenAudio(22050,MIX_DEFAULT_FORMAT,2,4096) < 0) {
    	cout << "Fehler beim Initialisieren von SDL_mixer" << endl ;
    	exit(1) ;
     }

     // Setzt einen Titel oben im Fenster und ermöglicht ein Icon einzufügen
     SDL_WM_SetCaption("Pandora Spiel",NULL);

}
Ich wollte nun wissen, ob ich so in der Art weiter machen kann und ob es "richtiges", "echtes" OOP ist ?
Ich glaube ja, weil ich doch an einem Objekt(dem Klassen Teil Pandora) Arbeite.


MfG LecramOS :-D

-- Mi Mär 17, 2010 21:03 --

Ich hänge jetzt schon den ganzen Tag an diesen Problem.

Ich bekomme immer die gleiche Fehlermeldung.

../kSDL_Bilder_Laden.h:110: error: cannot convert ‘SDL_Surface*’ to ‘SDL_Surface kSDL_Bilder_Laden::*’ in return
make: *** [fSDL_Bilder_Laden_Intro.o] Fehler 1


Weiß jemand wo ran es liegt ? :confused:??
Code:
/*
 * kSDL_Bilder_Laden.h
 *
 * Eine Klasse zum Laden der Bilder
 *
 *  Created on: 17.03.2010
 *      Author: lecramos
 */

#ifndef _KSDL_BILDER_LADEN_
#define _KSDL_BILDER_LADEN_



#include <iostream>
#include <cstdlib>
#include <string>
#include <SDL/SDL.h>
#include <SDL/SDL_image.h>
 using namespace std ;



class kSDL_Bilder_Laden {

 private:

	 SDL_Surface *hauptKaraktere  ;
	 SDL_Surface *hauptKaraktere2 ;
	 SDL_Surface *hauptKaraktere3 ;
	 SDL_Surface *nebenKaraktere  ;
	 SDL_Surface *nebenKaraktere2 ;
	 SDL_Surface *nebenKaraktere3 ;
	 SDL_Surface *karten          ;
	 SDL_Surface *karten2         ;
	 SDL_Surface *karten3         ;
	 SDL_Surface *Objekte         ;
	 SDL_Surface *Objekte2        ;
	 SDL_Surface *Objekte3        ;
	 SDL_Surface *optimierteBilder(string) ;


 public:

	 // Konstruktor und Destruktor Delaration
	 kSDL_Bilder_Laden() ;
	~kSDL_Bilder_Laden() ;



	 void gebeHauptKaraktere(string Haupt_K){hauptKaraktere = optimierteBilder(Haupt_K) ; }

	 void gebeHauptKaraktere2() ;
	 void gebeHauptKaraktere3() ;

};

// Konstruktor Definition
kSDL_Bilder_Laden::kSDL_Bilder_Laden() {

	 hauptKaraktere  = NULL ;
	 hauptKaraktere2 = NULL ;
	 hauptKaraktere3 = NULL ;
	 nebenKaraktere  = NULL ;
	 nebenKaraktere2 = NULL ;
	 nebenKaraktere3 = NULL ;
	 karten          = NULL ;
	 karten2         = NULL ;
	 karten3         = NULL ;
	 Objekte         = NULL ;
	 Objekte2        = NULL ;
	 Objekte3        = NULL ;

}


// Destruktor Definition

kSDL_Bilder_Laden::~kSDL_Bilder_Laden() {

}


// Bilder Optimieren Funktion

SDL_Surface kSDL_Bilder_Laden::*optimierteBilder(string bild) {

 // Funktions Variablen
 SDL_Surface *temp            = NULL ;
 SDL_Surface *optimiertesBild = NULL ;

    // Bei exit() wird SDL_Quit ausgeführt
    atexit(SDL_Quit) ;

    // Lädt ein Bild in den Temporaeren Speicher
    temp = IMG_Load(bild.c_str()) ;
    if(temp == NULL) {
       cout << "Fehler beim Laden und Optimieren von Bild" << endl ;
       exit(1) ;
    }

    // Optimiert das Bild mit der SDL_DisplayFormat Funktion
    optimiertesBild = SDL_DisplayFormat(temp) ;

    // Hier kommt noch der Color Key hin.

    // Gibt den Speicherplatz für das Temp Bild frei
    SDL_FreeSurface(temp) ;

return optimiertesBild ;                  //  <---- Hier ist der Fehler.

}


#endif //_KSDL_BILDER_LADEN_
:confused:??
 

Evil Azrael

Newbie
Joined
Jan 20, 2010
Messages
109
Location
Rheinkilometer 666 & hinter Heidelberg
Website
www.evilazrael.de
ICQ
78819723
WEBSITE
http://www.evilazrael.de
LOCATION
Rheinkilometer 666 & hinter Heidelberg
Also erstmal, wenn du so ran gehst, das "richtige OOP" zu finden, dann ist das schon mal falsch. OOP ist kein Selbstzweck, sondern ein Paradigma, Konzept ein Grundgedanke. Und globale Variablen sind auch ok, wenn sie sinnvoll eingesetzt werden. Das "OOP" gibt es nicht, also kannst du auch nicht sinnvoll fragen ob etwas OOP sei.

Wenn du wirklich OO arbeiten möchtest, dann solltest du dich erstmal fragen was (d)ein Objekt ist. Welche Ansammlung von Daten und Funktionen beschreibt ein Objekt sinnvoll. Was soll bespielsweise deine "kSDL_Initialisieren" Klasse sein? So wie die aktuell aussieht, würde es ein einfaches struct auch tun. Die Getter/Setter sind so total überflüssig, genauso gut könntest direkt auf die Variablen zugreifen. Zudem ist eigentlich üblich die Reihenfolge public/protected/private einzuhalten. Ja, das bedeutet, das du die Methoden davor nciht inline in der Klassendefinition implementieren kannst, aber das nur am Rande.

Ein SDL_Surface wäre beispielsweise eine schöne Klasse, wenn nicht die Funktionen alle ausserhalb liegen würden.

Fang erstmal mit ein paar Sachen wie ein paar einfache Klassen an, die sich schön initialisieren und sauber wieder selber aufräumen und somit ne ordentliche Kapselung bieten. Und wenn ein paar Konstanten oder Variablen wie die Auflösung global sind, dann ist das auch recht egal, es geht nur darum, das nicht jeder Mist global ist. Wenn du dich besser fühlst, kannst du ja immer eine Klasse Einstellungen anlegen und von der ein globales config Objekt anlegen.

Und auch wenn ich selber unsere schöne *hust* Sprache nicht gerne verleugne, programmiert wird auf Englisch!

http://de.wikipedia.org/wiki/Objektorientierte_Programmierung
 

LecramOS

Newbie
Joined
Feb 20, 2010
Messages
121
Age
35
Location
Pandora.
LOCATION
Pandora.
Ok. :wub:

In den Helmut Erlenkötter Buch für C++ wurde aber zuerst das private: nach oben gesetzt.
Nun ja.. Dann werde ich das mal ändern in public: und dann erst privat: :)

Kannst du mir bei den Problem oben Helfen wo ich immer diese eine Fehlermeldung bekomme ?
Der Fehler ist bei dem return von der optimierteBilder Funktion... ???

Aber ich schreibe dass sowieso nachher oder morgen alles noch mal neu... Aber vorher noch ein bisschen Lesen, weil
sonst mache Ich schon wieder viel zu viel verkehrt.

Ich finde das in Deutsch aber besser :-D . Weltweit werden meine Codes sowieseo nicht gehen. Wenn die
überhaupt weit gehen :confused:??

Egal.. :confused:: Also Englisch .



../kSDL_Bilder_Laden.h:110: error: cannot convert ‘SDL_Surface*’ to ‘SDL_Surface kSDL_Bilder_Laden::*’ in return
make: *** [fSDL_Bilder_Laden_Intro.o] Fehler 1
 

LecramOS

Newbie
Joined
Feb 20, 2010
Messages
121
Age
35
Location
Pandora.
LOCATION
Pandora.
Mal ehrlich.. Vieeeelen Dank. :confused:??

Ich war mir schon die seltsamsten Dinge am ausdenken wie ich dieses Problem lösen soll.

Ich verstehe manchmal nicht wieso ich da nicht drauf komme. Ich probiere hier die ganze Zeit alles mögliche aus.
Habe auch die Sternchen(Indirektionsoperatoren ?!?! :unsure: ) verstellt gehabt, nur halt nicht so .

Also, solche Sachen passieren mir ziemlich oft, dass ich die einfachsten Sachen nicht sehe beim Coden.
Bin ich damit alleine ?

Gut das es dich hier gibt Evil Azrael.
Du hast mir schon so einige male echt Super geholfen.
Trotzdem bin ich jetzt gerade von mir ein bisschen enttäuscht, dass ich das nicht raus bekommen habe.

:confused:??
 

Evil Azrael

Newbie
Joined
Jan 20, 2010
Messages
109
Location
Rheinkilometer 666 & hinter Heidelberg
Website
www.evilazrael.de
ICQ
78819723
WEBSITE
http://www.evilazrael.de
LOCATION
Rheinkilometer 666 & hinter Heidelberg
Ein Stern kann so einiges sein, mal ist es die Multiplikation, ein anderes mal löst der einen Pointer auf und ein anderes mal definiert er einen solchen.

kannst ja
typedef SDL_Surface* SurfacePtr in einen header packen, dann kannst du überall SurfacePtr statt SDL_Surface* benutzen. Macht einiges angenehmer und da keiner wissen braucht was SurfacePtr wirklich versteckt das den wahren typ auch ein bisschen. Trotzdem wäre ein SurfacePtr immer noch ein SDL_Surface pointer ;)
 

Baret

Newbie
Joined
Mar 12, 2010
Messages
143
LecramOS said:
Also, solche Sachen passieren mir ziemlich oft, dass ich die einfachsten Sachen nicht sehe beim Coden.
Bin ich damit alleine ?
nein! ;D
 

xyta

Still Fresh
Joined
Aug 28, 2009
Messages
887
Evil Azrael said:
Und auch wenn ich selber unsere schöne *hust* Sprache nicht gerne verleugne, programmiert wird auf Englisch!
Wo steht das denn geschrieben? Ich nehm auch ganz gerne deutsche aussagekräftige Bezeichnungen für irgendwas, wenn ich programmiere. Da seh ich sofort, was es ist und dass es von mir ist...

Es hängt vor allem davon ab, wer den Quelltext später lesen können soll... Internationale Projekte natürlich in Englisch. Wenn ich aber das große Deutschland-Geografiequiz programmiere spricht auch nix gegen deutsch.
 

LecramOS

Newbie
Joined
Feb 20, 2010
Messages
121
Age
35
Location
Pandora.
LOCATION
Pandora.
Hallo :)

Habe mal eine Frage. Warum soll eigentlich bei Klassen das "public:" an erster stelle kommen und dann erst das "private:" ?

Macht doch keinen unterschied für den Compiler. Oder ?

Ist mir aufgefallen, dass viele das unterschiedlich machen.

Ich würde das das "private:" oben besser finden, weil es meiner Meinung nach den Code übersichtlicher macht und man direkt am Anfang auf die Variablen gucken kann. Sonst hat man ja auch immer die Variablen nach oben gesetzt. ?!?!.
 

JohnDavidson

Newbie
Staff member
Joined
Aug 17, 2005
Messages
1,020
Age
32
Location
Mettmann
Website
www.masterlinux.de
ICQ
347384376
WEBSITE
http://www.masterlinux.de
LOCATION
Mettmann
LecramOS said:
Hallo :)

Habe mal eine Frage. Warum soll eigentlich bei Klassen das "public:" an erster stelle kommen und dann erst das "private:" ?

Macht doch keinen unterschied für den Compiler. Oder ?

Ist mir aufgefallen, dass viele das unterschiedlich machen.

Ich würde das das "private:" oben besser finden, weil es meiner Meinung nach den Code übersichtlicher macht und man direkt am Anfang auf die Variablen gucken kann. Sonst hat man ja auch immer die Variablen nach oben gesetzt. ?!?!.
Das ist egal wie man es macht. Du kannst auch öfters public, etc nutzen, also:
Code:
public:
   int integerOne;

private:
  int integerTwo;

public:
  int integer;
Es geht hier bei der Aussage wohl eher darum, dass du dir eine Reihenfolge dafür festlegst, die immer gleich ist. Damit dein Programmcode immer einheitlich ist und man später einen besseren Überblick hat. Die hier angesprochene Reihenfolge scheint anscheinend so üblich zu sein, heißt aber nicht dass man es so machen muss ;)
 

torro

Still Fresh
Joined
Jan 24, 2009
Messages
370
LecramOS said:
Ich würde das das "private:" oben besser finden, weil es meiner Meinung nach den Code übersichtlicher macht und man direkt am Anfang auf die Variablen gucken kann. Sonst hat man ja auch immer die Variablen nach oben gesetzt. ?!?!.
Irgendwas hast du da nicht verstanden. Im public Block werden doch ebenfalls variablen definiert.
 

LecramOS

Newbie
Joined
Feb 20, 2010
Messages
121
Age
35
Location
Pandora.
LOCATION
Pandora.
Irgendwas hast du da nicht verstanden. Im public Block werden doch ebenfalls variablen definiert.
Habe nie die Möglichkeit mit in Betracht gezogen, stimmt :-D

Ich habe die ganzen Variablen bisher immer in Private gepackt und wenn ich dann auf sie zugreifen will eine get und set funktion erstellt.
 

HolySmoke

Guardian Lion
Joined
Feb 2, 2009
Messages
199
Location
Kaub, RLP, Germany
Dass public zuerst kommt rührt daher, dass andere Leute, die deine libs als Binaries und Header erhalten, sich nur für die public und protected members interessieren {können,dürfen,müssen}.
 

LecramOS

Newbie
Joined
Feb 20, 2010
Messages
121
Age
35
Location
Pandora.
LOCATION
Pandora.
Ok... Danke :)

-- Fr Mär 26, 2010 21:57 --

Hallo. :confused:??

Weiß jemand wie ich auf einen Zeiger in einer andere Funktion in einer anderen Datei zugreifen kann ?

Ich dachte mir mal, ich schreibe einen Zeiger in meine GlobaleVariablen.h der auf einen anderen Zeiger vom Typ SDL_Surface zeigen soll der sich in der Datei InitialisiereSDL.cpp befindet.

Wie kann ich ich das realisieren ?, weil immer wenn ich einen Zeiger in meiner GlobalenVariablen.h initialisieren will sagt er mir natürlich , dass nirgendwo so ein Zeiger ist, weil sich ja das Ziel in der anderen Datei befindet.

Weiß jemand Rat ?

Dankeschön. :)

GlobaleVariablen.h
Code:
#ifndef _ASDL_GLOBAL_
#define _ASDL_GLOBAL_




#include <SDL/SDL.h>
#include "fSDL_Initialisieren.h"   // <-- Habe mal probiert ob das hilft :)   nööö !

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


// Bildschirm Video Modus.
SDL_Surface *BILDSCHIRM = &bildschirm ;         //<--- Hier soll ein Zeiger entstehen 
 

// Maximale Lautstärke.
static int LAUTSTAERKE_MAX = 128 ;
static int LAUTSTAERKE_MIN =   0 ;



#endif //__ASDL_GLOBAL_
Die funktion .cpp
Code:
#include "aSDL_GlobaleVariablen.h"

#include <SDL/SDL.h>

#include <iostream>

 using namespace std ;


SDL_Surface *fSDL_Initialisieren() {


	if(SDL_Init(SDL_INIT_EVERYTHING) < 0) {

		cout << "Fehler beim initialisieren von SDL !" << endl ;

	}

	SDL_Surface *bildschirm = SDL_SetVideoMode(BILDSCHIRM_WEITE,BILDSCHIRM_HOEHE,BILDSCHIRM_FARBTIEFE,SDL_SWSURFACE) ; // Auf dies soll gezeigt werden. 






return bildschirm ;
}
RTFM
 

Evil Azrael

Newbie
Joined
Jan 20, 2010
Messages
109
Location
Rheinkilometer 666 & hinter Heidelberg
Website
www.evilazrael.de
ICQ
78819723
WEBSITE
http://www.evilazrael.de
LOCATION
Rheinkilometer 666 & hinter Heidelberg
// Bildschirm Video Modus.
SDL_Surface *BILDSCHIRM = 0; //<--- Pointer be here *G*

Das ist ein Zeiger, und der zeigt auf 0. Der übliche Wert für "ungültig".

http://sdl.beuc.net/sdl.wiki/SDL_SetVideoMode guck mal, was dir SDL_SetVideoMode zurückgibt: SDL_Surface*, also einen Zeiger *g*den kannst du da direkt zuweisen, also BILDSCHIRM = SDL_SetVideoMode(...);

Wenn BILDSCHIRM == 0 -> Fehler/uninitialisiert, ansonsten OK.

Das Bildschirm-Surface kannst du dir übrigens immer mit SDL_GetVideoSurface() holen, bräuchtest du also nicht unbedingt zu speichern.
 

LecramOS

Newbie
Joined
Feb 20, 2010
Messages
121
Age
35
Location
Pandora.
LOCATION
Pandora.
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 :confused:?? .

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:
/*
 * 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_
:confused:??
 

Evil Azrael

Newbie
Joined
Jan 20, 2010
Messages
109
Location
Rheinkilometer 666 & hinter Heidelberg
Website
www.evilazrael.de
ICQ
78819723
WEBSITE
http://www.evilazrael.de
LOCATION
Rheinkilometer 666 & hinter Heidelberg
Code:
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.
 

LecramOS

Newbie
Joined
Feb 20, 2010
Messages
121
Age
35
Location
Pandora.
LOCATION
Pandora.
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 :confused:??
 

Evil Azrael

Newbie
Joined
Jan 20, 2010
Messages
109
Location
Rheinkilometer 666 & hinter Heidelberg
Website
www.evilazrael.de
ICQ
78819723
WEBSITE
http://www.evilazrael.de
LOCATION
Rheinkilometer 666 & hinter Heidelberg
LecramOS said:
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.
 

LecramOS

Newbie
Joined
Feb 20, 2010
Messages
121
Age
35
Location
Pandora.
LOCATION
Pandora.
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.

:confused:??
 
Top