int WhereX; // Where are we currently rendering on the map?
int WhereY;
WhereY = WorldY;
WhereX = WorldX;
for(int y = -6; y < 28; y++)
{
for(int x = 0; x < 10; x++)
{
int tilex = x+2*X_Overlap*x+(X_Overlap)*(y&1);
int tiley = y+Y_Overlap*y;
// Set the Background Pos
tile_texbg.x = tilex;
tile_texbg.y = tiley;
// Set the Middleground Pos
tile_texmg.x = tilex;
tile_texmg.y = tiley;
tile_texbg.curr_frame = level->Map[0][WhereX][WhereY].TileID; // First Layer ( Background )
tile_texmg.curr_frame = level->Map[1][WhereX][WhereY].TileID; // Second Layer ( Middle ground )
if ( drawBG == true )
tile_texbg.Draw_Graphics( );
if ( drawMG == true )
tile_texmg.Draw_Graphics( );
WhereX++;
}
WhereY++;
WhereX = WorldX;
}
Thanx for your help.
Lutz Hören
[ Power Productions ]
Some Optimisation
Hi,
i am developing an Isomatric Engine but my Drawing function kicks my FPS down! Are there any Optimisation?
psYchOtroW
January 13, 2001 08:23 AM
Hell yeah, get rid of all those pointers...
und dann mach die variablen tilex u. tiley nur einmal vor den schleifen oder besser noch lass sie ganz wegfallen.
weg mit all den zeigern am besten guckst dir das nochmal an du verschwendest und verlangsamst extrem mit diesem algo verdammt viel ich kenn den rest ja nicht aber es sieht so aus also könntest du das ganze ziemlich stark verringern hängt noch stark davon ab ob du mit cpp oder c arbeitest diese ganzen doppelten aktionen sind zum kotzen werde sie los kennst du asm? falls du wirklich optimieren willst wär das was für dich!aber für ne iso engine wahrscheinlich überflüssig das müsste auch so schon neganze menge bringen wenn du die zeiger die ganzen doppelten sachen etc loswirst guck dir das nochmal genau an und überleg was du da machst....
und dann mach die variablen tilex u. tiley nur einmal vor den schleifen oder besser noch lass sie ganz wegfallen.
weg mit all den zeigern am besten guckst dir das nochmal an du verschwendest und verlangsamst extrem mit diesem algo verdammt viel ich kenn den rest ja nicht aber es sieht so aus also könntest du das ganze ziemlich stark verringern hängt noch stark davon ab ob du mit cpp oder c arbeitest diese ganzen doppelten aktionen sind zum kotzen werde sie los kennst du asm? falls du wirklich optimieren willst wär das was für dich!aber für ne iso engine wahrscheinlich überflüssig das müsste auch so schon neganze menge bringen wenn du die zeiger die ganzen doppelten sachen etc loswirst guck dir das nochmal genau an und überleg was du da machst....
Here you go.
int WhereX; // Where are we currently rendering on the map?
int WhereY;
WhereY = WorldY;
WhereX = WorldX;
const int minY = -6;
const int maxY = 28;
const int minX = 0;
const int maxX = 10;
const int 2X_Overlap = 2 * XOverlap;
int tileX = -2XOverlap;
int tileY = minY + ((minY - 1) * Y_Overlap);
int tileXIncrement = 2XOverlap;
int tileYIncrement = Y_Overlap;
int tileXOverlapFlip = 0;
for(int y = minY; y < maxY; y++)
{
//only calculate y when y needs to be changed
tileY += tileYIncrement;
//only change when y changes
tileXOverlapFlip = XOverlap * (1 & y);
for(int x = minX; x < maxX; x++)
{
tileX = ( tileX + tileXIncrement + tileXOverlapFlip);
if( drawBG )
{
// Set the Background Pos
tile_texbg.x = tilex;
tile_texbg.y = tiley;
// First Layer ( Background )
tile_texbg.curr_frame = level->Map[0][WhereX][WhereY].TileID;
// Draw
tile_texbg.Draw_Graphics();
}
if( drawMG )
{
// Set the Middleground Pos
tile_texmg.x = tilex;
tile_texmg.y = tiley;
// Second Layer ( Middle ground )
tile_texmg.curr_frame = level->Map[1][WhereX][WhereY].TileID;
// Draw
tile_texmg.Draw_Graphics();
}
WhereX++;
}
WhereY++;
WhereX = WorldX;
}
Edited by - DerekDay on January 17, 2001 5:48:24 PM
int WhereX; // Where are we currently rendering on the map?
int WhereY;
WhereY = WorldY;
WhereX = WorldX;
const int minY = -6;
const int maxY = 28;
const int minX = 0;
const int maxX = 10;
const int 2X_Overlap = 2 * XOverlap;
int tileX = -2XOverlap;
int tileY = minY + ((minY - 1) * Y_Overlap);
int tileXIncrement = 2XOverlap;
int tileYIncrement = Y_Overlap;
int tileXOverlapFlip = 0;
for(int y = minY; y < maxY; y++)
{
//only calculate y when y needs to be changed
tileY += tileYIncrement;
//only change when y changes
tileXOverlapFlip = XOverlap * (1 & y);
for(int x = minX; x < maxX; x++)
{
tileX = ( tileX + tileXIncrement + tileXOverlapFlip);
if( drawBG )
{
// Set the Background Pos
tile_texbg.x = tilex;
tile_texbg.y = tiley;
// First Layer ( Background )
tile_texbg.curr_frame = level->Map[0][WhereX][WhereY].TileID;
// Draw
tile_texbg.Draw_Graphics();
}
if( drawMG )
{
// Set the Middleground Pos
tile_texmg.x = tilex;
tile_texmg.y = tiley;
// Second Layer ( Middle ground )
tile_texmg.curr_frame = level->Map[1][WhereX][WhereY].TileID;
// Draw
tile_texmg.Draw_Graphics();
}
WhereX++;
}
WhereY++;
WhereX = WorldX;
}
Edited by - DerekDay on January 17, 2001 5:48:24 PM
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement
Recommended Tutorials
Advertisement