PlanetSwitch Planet3DS PlanetVita PSP.de PlanetiPhone Classics Forum Handheld-Wiki

PGN-ID:[?] (Nicht eingeloggt)
Login
Registrieren
PlanetDS PlanetGameboy N-Page.de
portablegaming.de  

Zurück   portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung


Development Abteilung Ihr wollt für euren Lieblingshandheld Spiele oder Tools entwickeln?
Bitte die Präfixe benutzen!

Antwort
 
LinkBack Themen-Optionen Thema durchsuchen
Alt 23.07.2003, 12:29   #1
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard Mode4 vs. Sprite

Hi!
Ich möchte meine 3D Engine so gestalten, das ich die
Strecke die nur aus Vierecken besteht, einzeichne
und aber auch Sprites verwende, für die Fahrer.
Jetzt habe ich mal schnell mein Beispiel Source
für einen Sprite umgecodet, und jetzt wird er nicht mehr
angezeigt:
Code:
#include "gba.h"
#include "Bild.h"
#define CharMem ((u8*)0x6010000)

int main(void)
{
    u16 i,x,y;

    SetMode(MODE_4 | OBJ_ENABLE | OBJ_MAP_2D);
    for (i=0;i<256;i++)
    {
        OBJPaletteMem[i] = Bild_Palette[i];
    }
    InitializeSprites(); 

    for (i=0;i32*+32*8<;i++)
    {
        CharMem[i + 512] = Bild_Tiles[i];
    }
    
    while(1)
    {
        if(!(*KEYS & KEY_RIGHT)) { x++; }
        if(!(*KEYS & KEY_LEFT))  { x--; }
        if(!(*KEYS & KEY_UP))    { y--; }
        if(!(*KEYS & KEY_DOWN))  { y++; }
        
        sprites[0].attribute0 = SQUARE|COLOR_256|y;
        sprites[0].attribute1 = SIZE_32|x;  
          
        CopyOAM();
        WaitForVsync();
    }
}
SetMode(MODE_4 | OBJ_ENABLE | OBJ_MAP_2D);
war früher:
SetMode(MODE_2 | OBJ_ENABLE | OBJ_MAP_2D);

und
CharMem[i + 512] = Bild_Tiles[i];
war
CharMem[i] = Bild_Tiles[i];

Leider wird wie gesagt das Sprite nicht mehr angezeigt.
Gibt es überhaupt die Möglichkeit, zu zeichnen via
VideoBuffer[y*240+x]=Palettenindex; und gleichzeitig
ein Sprite anzuzeigen?

Sonst müsste ich nämlich auch die Sprites selber einzeichnen
lassen. Diese würden wieder zusätzlich Farben verbrauchen.
Farben die ich schon für die Strecke brauche. Im Mode3 würde
es zwar gehen, aber wie ihr alle wisst, ist dieser langsamer als Mode4.
was nun?

Achja: Wie sieht es mit folgenden aus?:
Funktionieren die new und Delete Befehle, um Speicher
zu sparen? und wie sieht es mit der inline Funktion aus?
Also wo die CPU die Funktion direkt in den Speicher lädt, und
nichtmehr immer zu ihr Springt?
mfg olli
Vertex ist offline   Mit Zitat antworten
Sponsored Links
Alt 23.07.2003, 18:12   #2
Tom männlich
 
Benutzerbild von Tom
 
Registriert seit: 08.10.2002
Alter: 35

Tom hat die Renommee-Anzeige deaktiviert

Standard

In den Bitmap-Modes ist der Grafik-Speicher Bereich v. den Sprites nur halb so groß.. (von 0x6014000 bis 0x6017FFF)

Du musst aber darauf achtgeben, dass Du dem OAM trotzdem die Speicher-Nummern übergibst, als würde er mit 0x6010000 beginnen. Die erste Nummer ist also 512..

Die von Dir angesprochenen Befehle funktionieren, soweit ich weiß, alle..

Probiers einfach aus.
Tom ist offline   Mit Zitat antworten
Alt 23.07.2003, 22:07   #3
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard

Danke!
Blos wie gebe den OAM die Speichernummer? Hatte bisher nur
ein mir angezeigt, und da ist die Speichenrummer sicherlich 0 also default. Ist das mit diesem Charactername? Wenn ja, kannst Du
mir bitte erklähren wie sich aufbaut. Bei thepernproject ist das
nicht so gut rüber gekommen.
thx!
mfg olli
Vertex ist offline   Mit Zitat antworten
Alt 23.07.2003, 23:29   #4
Tom männlich
 
Benutzerbild von Tom
 
Registriert seit: 08.10.2002
Alter: 35

Tom hat die Renommee-Anzeige deaktiviert

Standard

Puh..

Also:

Der OAM ist ein Speicherbereich in dem die ganzen Eigenschaften von Sprites verwaltet werden.. Dazu gehören: Größe, Form, Position, die Anfangsadresse des Bildes (Character Name), der Winkel, vflip hflip etc.

Es gibt 128 dieser Einträge. Jeder von ihnen ist 3*16bit lang dazwischen ist immer ein 16bit register, das Rotations-Daten enthält. Das bedeutet jedes vierte 16bit register beginnt ein neuer OAM Entry..

Ein Entry besteht aus drei registern:

Attribute0:

[F][E][D][C][B][A][9][8][7][6][5][4][3][2][1][0]
|111||2||3||4444|5||6||77777777777777777|

1: [F+E] Form d. Sprites (00=Quadrat, 01 = breit, 10 = hoch)
2: [D] 0=16 Farben 1=256 Farben
3: [C] Mosaic: 1=on,0=off
4: [B+A] 00=normal, 01=transparent, 10=OBJ Window(kA, was das heißt)
5: [9] 0: normal, 1: doppelte Größe
6: [8] 0: Rotation/scaling off, 1: r/s on
7: [7-0] Y-Koordinate

Attribute 1:

[F][E][D][C][B][A][9][8][7][6][5][4][3][2][1][0]
|111||2||3||444444||5555555555555555555|

1: [F+E] Größe d. Sprites( siehe pern)
2: [D] VFlip (vertikales spiegeln d. Sprites)
3: [C] HFlip (horizontales spiegeln d. Sprites)
2+3+4:[D-9] Wenn Rotation/Scaling aktiviert ist werden hier die Parameter eingegeben(0-32)
5: [8-0] X-Koordinate

Attribute 2:

[F][E][D][C][B][A][9][8][7][6][5][4][3][2][1][0]
|11111111||222|3333333333333333333333|

1: [F-C] In 16-Farb-Modus: Paletten-Nummer
2: [B-A] Priorität (0-3)
3: [9-0]Character-Name: die Adresse des Anfangs der Bild-daten in Tiles (64 Pixel = 64 byte) 0-1024 (Formel: (Adresse-0x6010000)/64=Character Name)

Hmm.. ich hoffe Du kennst Dich einigermassen mit diesem dahingepfuschten Zeug aus.. Falls Du noch Fragen hast, nur zu.

Edit:

Wie bereits gesagt enthält jedes vierte Register Rotations-Daten. Vier dieser Daten setzen sich zu einem Rotations-Eintrag zusammen. das heißt es gibt 32 davon. Wenn Rotation-Scaling beim Sprite aktiviert ist kann man in bit 9 bis bit d v. Attribute 1 eingeben welchen Eintrag das sprite benutzen soll..
Tom ist offline   Mit Zitat antworten
Alt 24.07.2003, 12:46   #5
 
Registriert seit: 27.06.2003
Alter: 33

Vertex hat die Renommee-Anzeige deaktiviert

Standard

Hi!
Danke das ist schonmal Goldwert!
Ich glaube ich mal erstmal ein simples Tetris, damit ich mich
in Sprites etc. eingewöhne.
Hätte da jetzt noch ein Farge zu Deiner Formel:
Adresse-0x6010000)/64=Character Name
Ergeben sich die 64 daraus, das der Sprite aus 64 Tiles besteht.
Also 64*64 Pixel = 8*8 Tiles = 64 Tiles ?
Würde es dann bei Tall + Size-16 folgendermaßen lauten
Adresse-0x6010000)/4=Character Name)
Da 8*32 Pixel = 1*4 Tiles = 4 Tiles?

Und kann man eigentlich diese Effekte wie Transparent und Mosaik
NUR in einer Tilemap benutzen?
thx!
mfg olli
Vertex ist offline   Mit Zitat antworten
Alt 24.07.2003, 14:26   #6
Tom männlich
 
Benutzerbild von Tom
 
Registriert seit: 08.10.2002
Alter: 35

Tom hat die Renommee-Anzeige deaktiviert

Standard

Nein.

Die 64 ergeben sich daraus, dass ein Tile 8*8 Pixel zu je 8bit groß ist. Also 64byte.. Du musst beim Character Name immer die Nummer des Anfangs-Tile angeben.

Ein 64*64 Pixel Sprite ist 4 Kbyte groß.. Von denen passen Dir grade mal 4 Stück in den VRam, wenn Du Mode 4 verwendest.

Du kannst alle Sprite-Effekte auch in den Bitmap Modes verwenden.(Wieso auch nicht, schliesslich sind Mode3-5 für den Grafik-Chip eigentlich eine Entlastung) Die einzige Limitierung ist eben der geringere Speicherplatz für die Bilder..
Tom ist offline   Mit Zitat antworten
Antwort

  portablegaming.de > Allgemeines Spielehandheldforum, GBA, N-Gage und Development > Development Abteilung

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche

Forumregeln
Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Leute mit 2D-Sprite Hobby hier? return 0 Sonstiges (GBA) 3 08.04.2005 12:37
8x8 Software Sprite goldmomo Development Abteilung 5 07.09.2004 10:58
Sprite - Character Memory Vertex Development Abteilung 3 19.07.2003 12:04
n00b sucht ein gutes Sprite & Tiles Tutorial ProfEich Development Abteilung 3 18.05.2003 15:04
32x32p Sprite bewegen ToruX Development Abteilung 4 22.09.2002 12:24


Alle Zeitangaben in WEZ +2. Es ist jetzt 02:43 Uhr.


Powered by vBulletin® Version 3.8.9 (Deutsch)
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.0
Template-Modifikationen durch TMS
PortableGaming.de © bk 2000 - 2010

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231