KINGx - Das inoffizielle PlayStation Forum & News Portal

Normale Version: C :: Graphics.h/.c - MapSystem?
Sie sehen gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Servus Leute Wink

Seit heute habe ich mich mal wieder mit der PSP-Programmierung zugewendet. Ich arbeite zurzeit mit der Graphics.h/.c um ein (noch) kleines Homebrew zu coden. Wie sich ein Spieler bewegt oder wie man den Hintergrund bewegt, wenn der Spieler eine bestimmte Stelle erreicht hast, das habe ich auch schon^^

Nun habe ich ein kleines Problem. Ich benutze einen Hintergrund, welcher die Maße des PSP Displays entsprechen. Ich möchte allerdings eine größere Fläche benutzen, also ein MapSystem.

Hat irgendjemand eine Idee, wie man ein MapSystem mithilfe der graphics.h/.c codet?

Danke schonmal im vorraus^^

lg
Wenn ich dich richtig verstanden habe willst du dass sich ein großes hintergrund-
Bild bewegt wenn deine Figur geht?
Wenn ya dann kannst du einfach die x und y Koordinaten des Bildes verschieben
lg

Zitat:
Nun habe ich ein kleines Problem. Ich benutze einen Hintergrund, welcher die Maße des PSP Displays entsprechen. Ich möchte allerdings eine größere Fläche benutzen, also ein MapSystem.


Die Fläche einfach größer Machen und an -Koordinaten drawen? ansonsten soetwas wie:
if (map==1) {
draw_für_map1();
}

beim Raumübergang könntest du dann so vorgehen:
if (x>=0 && y>=-16 && x<=0 && y<=0){
map=2;
}

ansonste, die Frage kommt mir wie "Wie progge ich ein MMORPG" vor

SIM sk :
Wenn ich dich richtig verstanden habe willst du dass sich ein großes hintergrund-
Bild bewegt wenn deine Figur geht?
Wenn ya dann kannst du einfach die x und y Koordinaten des Bildes verschieben
lg


Wäre das sinnvoll einfach ein großes Bild zu verwenden?

~Hook~ :
Wäre das sinnvoll einfach ein großes Bild zu verwenden?


Nein, nimm mehrere Bilder die du dann zu einem Zusammenfügst. du drawst immer nur ein paar davon, um nicht den Speicher der PSP zu überlasten...
20 mb hast du für dein Game Wink

EDIT: So funktioniert übrigens Pokemon.
die Map wird in Quadrate aufgeteilt und die naheliegendsten 3 werden gedrawt, daher kommt das Gefühl, das alles bei Pokemon "eins" ist...

@DoubleDD_aka_domis4: Ah, Danke Wink
Also, wieviele Quadrate von einem Bild soll ich dann zeichnen und wie zeichnet man überhaupt nur
einen bestimmten Teil eines Bildes mithilfe der graphics.h/.c?
lies meinen vorherigen Beitrag.

DoubleDD_aka_domis4 :
lies meinen vorherigen Beitrag.


Spezifisch hast du nichts von einer Funtkion geschrieben, mit welcher man nur einen bestimmen Teil zeichnen kann^^

ohje, vor dem problem saß ich acuh schon. ich habs so gelöst:

ich hab erstmal 4 verschiedene Layer, 2 bildlayer untermm spieler, ein Bildlayer über der Figur und eine Kollisionsebene. Dafür muss ich erstmal einige variablen definieren:

PHP-Code:
Image *world, *tiles[16][15], *upperlayer[16][15], *middlelayer[16][15]; 


dann habe ich die verschiedenen layer definiert, also welches bild-teil an welcher stelle der map sitzen soll:

gespoilert, da sehr groß (anzeigen)
jetzt lasse ich das programm ein paar generelle infos zur map zukommen, z.b. wie breit und hoch diese ist, und wo sich die kamera zurzeit befinden:

PHP-Code:
    mapbreite=(sizeof(map[0])*2)/(sizeof(int)*sizeof(int));
    
maphoehe=sizeof(map)/(mapbreite*sizeof(int)*2);
    
randx=mapbreite*32;
    
randy=maphoehe*32;
    
quellx=0;
    
quelly=0


als nächstes müssen dem programm die Bilder gegeben werden, die Bilder werden dabei in teilstücken (bei mir in 32*32 pixel rechtecken). alle Bilder-teile einer ebene sind in einem Bild, welches dann halt in 32*32 pixel tiles aufgeteilt wird, das sieht bei mir so aus:

PHP-Code:
    char buffer[64];
    
sprintf(buffer"tilesets\\world.png");
    
world loadImage(buffer);
    
int t,z;
    for(
t=0;t<16;t++){
        for(
z=0;z<15;z++){
            
tiles[t][z] = createImage(32,32);
            
blitImageToImage(z*32t*323232,  world00,tiles[t][z]);
        }
    }
    
sprintf(buffer,"tilesets\\upperlayer.png");
    
world=loadImage(buffer);
    for(
t=0;t<16;t++){
        for(
z=0;z<15;z++){
            
upperlayer[t][z] = createImage(32,32);
            
blitImageToImage(z*32t*323232,  world00,upperlayer[t][z]);
        }
    }
    
sprintf(buffer,"tilesets\\middlelayer.png");
    
world=loadImage(buffer);
    for(
t=0;t<16;t++){
        for(
z=0;z<15;z++){
            
middlelayer[t][z] = createImage(32,32);
            
blitImageToImage(z*32t*323232,  world00,middlelayer[t][z]);
        }
    } 


und dann gilt es halt noch funktionen zu schreiben, welche die nun geladene map dann auch richtig zeichnen:

PHP-Code:
void drawsupperlayer(){
    
int t,z,r,w;
    for(
t=0;t<18;t++){
        for(
z=0;z<30;z++){
            
r=z*32+quellx;
            
w=t*32+quelly;
            if(
map[t][z][1]<16 &amp;&ampmap[t][z][0]<16 &amp;&ampr>=-32 &amp;&ampw>=-32 &amp;&ampr<=512 &amp;&ampw<=304blitAlphaImageToScreen(z*32 ,t*32 ,32 32tiles[map[t][z][1]][map[t][z][0]], rw);
            if(
middle[t][z][1]<16 &amp;&ampmiddle[t][z][0]<16 &amp;&ampr>=-32 &amp;&ampw>=-32 &amp;&ampr<=512 &amp;&ampw<=304blitAlphaImageToScreen(z*32 ,t*32 ,32 32middlelayer[middle[t][z][1]][middle[t][z][0]], rw);
        }
    }
}
void drawupperlayer(){
    
int t,z,r,w;
    for(
t=0;t<18;t++){
        for(
z=0;z<30;z++){
            
r=z*32+quellx;
            
w=t*32+quelly;
            if(
upper[t][z][1]<16 &amp;&ampupper[t][z][0]<16 &amp;&ampr>=-32 &amp;&ampw>=-32 &amp;&ampr<=512 &amp;&ampw<=304blitAlphaImageToScreen(z*32 ,t*32 ,32 32upperlayer[upper[t][z][1]][upper[t][z][0]], rw);
        }
    }

damit das funktioniert müssen im programm die variablen quellx und quelly richtig gehandlet werden. z.b. wenn der spieler sich 64 pixel von der mitte des bildschirms aus gesehen nach rechts bewegt, muss quellx = -64 sein. Deshalb ist bei meinem programm das handlen von quellx und quelly auch in der funktion zur figurbewegung.

DoubleDD_aka_domis4 :

Zitat:
Nun habe ich ein kleines Problem. Ich benutze einen Hintergrund, welcher die Maße des PSP Displays entsprechen. Ich möchte allerdings eine größere Fläche benutzen, also ein MapSystem.


Die Fläche einfach größer Machen und an -Koordinaten drawen? ansonsten soetwas wie:
if (map==1) {
draw_für_map1();
}

beim Raumübergang könntest du dann so vorgehen:
if (x>=0 && y>=-16 && x<=0 && y<=0){
map=2;
}


das meinte ich^^
ansonsten, neutrosiders lösung ist auch nicht schlecht

@Neutrosider: Danke erstmal dass du dir die Zeit genommen hast um mir dies ausführlich zu erklären Wink
Puh...das ist irgendwie schon etwas komplex wie du das gelöst hast^^
Aber Danke Wink
aber hook, denk dran, je mehr du selbst schaffst, dessto besser verstehst dus später.

Neutrosider :
aber hook, denk dran, je mehr du selbst schaffst, dessto besser verstehst dus später.


Du weißt genau dass ich nicht Hook heiße Big Grin
Und Danke, werd ich mir merken Wink

Du hast es ja sicher auch selbst gelöst Wink

jop, hab aber auch lange dran gearbeitet. aber glaubmir, so funktionierts und viel einfacher wirstes nicht hinbekommen ^^

Neutrosider :
jop, hab aber auch lange dran gearbeitet. aber glaubmir, so funktionierts und viel einfacher wirstes nicht hinbekommen ^^


Ich denke, die Arbeit hat sich gelohnt Wink
Hast du es nicht auch so bei "RPG?" gemacht (falls es so hieß)?

Seiten: 1 2
Referenz-URLs