Zurück   Flashforum > Flash > ActionScript > Spielkonzepte und Spieleprogrammierung

Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 30-11-2006, 17:55   #1 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
BitmapData für TileBasedGame

Hallöchen,

muss hier gerade ein Tile-Based-Game aufziehen und überlege ob ich die ganze Geschichte in ein BitmapData-Object zeichne und es dann anzeige. Also im Prinzip würde ich alle Animationen, Tiles etc. als Bitmaps nehmen und sie entsprechend zu einem großen Bitmap (der Bühne) zusammenfügen und dann anzeigen.

Gibt es da irgendwelche Nachteile im Vergleich zur Variante als AttachAndRemove-Engine?

Gibts da sehr gute Links (besonders bzg. Double Buffering)?
Ich hab da nämlich kleinere Grafikaussetzer (also Verzögerungen) bei schnelleren Geschwindigkeiten.

Hab mal nen Beispiel drangehängt. War nur ein kleiner Test. Das ganze wird aus zei Tiles zusammengesetzt.

der code:
ActionScript:
  1. import flash.display.BitmapData;
  2. import flash.geom.Rectangle;
  3. import flash.geom.Point;
  4.  
  5. var tile1:BitmapData = BitmapData.loadBitmap("tile1");
  6. var tile2:BitmapData = BitmapData.loadBitmap("tile2");
  7. var tiles:Array = [tile1, tile2];
  8.  
  9. var map = [[1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  10.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  11.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  12.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  13.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  14.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  15.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  16.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  17.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  18.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  19.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  20.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  21.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  22.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  23.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2]
  24.         ];
  25.  
  26. var screen:MovieClip = createEmptyMovieClip("screeny", 2);
  27.  
  28. var tileWidth:Number = 100;
  29. var tileHeight:Number = 50;
  30.  
  31. var speed = 8;
  32. var worldx:Number = 0;
  33. var worldy:Number = 0;
  34.  
  35. var screenRect:Rectangle = new Rectangle(0,0,500,350);
  36.  
  37.  
  38. var world:BitmapData = new BitmapData(500,350);
  39.  
  40. //
  41. var rect:Rectangle = new Rectangle(0,0,100,50);
  42. screen.attachBitmap(world,1);
  43.  
  44. screen.cacheAsBitmap = true;
  45. screen.scrollRect = screenRect;
  46. screenBuffer.cacheAsBitmap = true;
  47. screenBuffer.scrollRect = screenRect;
  48. screen.attachBitmap(world,1);
  49. onEnterFrame = function () {
  50.     //world.dispose();
  51.    
  52.     var buffer:BitmapData = new BitmapData(500,350);
  53.     worldx -= speed;
  54.     var c:Number = 0;
  55.     var t:Number = getTimer();
  56.     for (var i=0;i< map.length;i++) {
  57.         for (var j=0; j< map[i].length;j++) {
  58.             var tx:Number = worldx + (j*tileWidth/2) + (i*tileHeight);
  59.             var ty:Number = 200 + (i*tileHeight/2) - (j*tileWidth/4);
  60.             //trace("tile("+i + "," + j + ") = " + tx + ", " + ty );
  61.             var p:Point = new Point(tx, ty);
  62.             if (p.x + rect.width > 0 && p.x < 500 &&
  63.                 p.y + rect.height > 0 && p.y < 350) {
  64.                
  65.                 buffer.copyPixels(tiles[map[i][j]-1],  rect,  p, null, null, true);
  66.             }
  67.            
  68.         }
  69.     }
  70.    
  71.     //world.copyPixels(buffer, screenRect, new Point(0,0));
  72.     world.dispose();
  73.     world = buffer.clone();
  74.     screen.attachBitmap(world,1);
  75.     buffer.dispose();
  76.    
  77. }

ansehen: http://www.bungartbessler.com/test/bitmaptest.html
Angehängte Dateien
Dateityp: zip tilebasedTest.zip (47,8 KB, 15x aufgerufen)
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???
K-Grabowski ist offline   Mit Zitat antworten
Alt 01-12-2006, 10:42   #2 (permalink)
Neuer User
 
Benutzerbild von K-Grabowski
 
Registriert seit: Jan 2003
Ort: Arminia!!!! Bielefeld
Beiträge: 1.138
so, läuft jetzt besser, aber gehts noch flüssiger, ohne kleine Ruckler bzw. Aussetzer? Bzw. gibts ne bessere Möglichkeit das ganze Flüssiger zu machen, aber mit der Bedingung das die Map Frame für Frame onTheFly gezeichnet wird. Sind SuperTiles ne Lösung?

ActionScript:
  1. import flash.display.BitmapData;
  2. import flash.geom.Rectangle;
  3. import flash.geom.Point;
  4.  
  5. var screenWidth:Number = 550;
  6. var screenHeight:Number = 400;
  7.  
  8. var tile1:BitmapData = BitmapData.loadBitmap("tile1");
  9. var tile2:BitmapData = BitmapData.loadBitmap("tile2");
  10. var tiles:Array = [tile1, tile2];
  11.  
  12. var map = [[1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  13.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  14.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  15.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  16.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  17.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  18.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  19.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  20.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  21.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  22.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  23.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  24.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  25.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2],
  26.         [1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2,1,2]
  27.         ];
  28.  
  29. var screenClip:MovieClip = createEmptyMovieClip("screenClip", 2);
  30. var bufferClip:MovieClip = createEmptyMovieClip("bufferClip", 1);
  31. var tileWidth:Number = 100;
  32. var tileHeight:Number = 50;
  33.  
  34. var speed = 8;
  35. var worldx:Number = 0;
  36. var worldy:Number = 0;
  37.  
  38. var screenRect:Rectangle = new Rectangle(0,0,screenWidth,screenHeight);
  39.  
  40.  
  41. var worldBitmap:BitmapData = new BitmapData(screenWidth,screenHeight);
  42. var worldBitmapBuffer:BitmapData = new BitmapData(screenWidth,screenHeight);
  43.  
  44. var tileRect:Rectangle = new Rectangle(0,0,100,50);
  45.  
  46. buffer.attachBitmap(worldBitmapBuffer,1);
  47. buffer.scrollRect = screenRect;
  48.  
  49. screenClip.attachBitmap(worldBitmap,1);
  50. screenClip.scrollRect = screenRect;
  51.  
  52. var emptyBitmap:BitmapData = new BitmapData(screenWidth, screenHeight);
  53.  
  54.  
  55. onEnterFrame = function () {
  56.     //world.dispose();
  57.     worldBitmapBuffer.copyPixels(worldBitmap, screenRect, new Point(0,0));
  58.     bufferClip.swapDepths(screenClip);
  59.     worldBitmap.fillRect(screenRect, 0xFFFFFFFF)
  60.     worldx -= speed;
  61.     var c:Number = 0;
  62.     var p:Point;
  63.     for (var i=0;i< map.length;i++) {
  64.         for (var j=0; j< map[i].length;j++) {
  65.             var tx:Number = worldx + (j*tileWidth/2) + (i*tileHeight);
  66.             var ty:Number = 200 + (i*tileHeight/2) - (j*tileWidth/4);
  67.             //trace("tile("+i + "," + j + ") = " + tx + ", " + ty );
  68.             p = new Point(tx, ty);
  69.             if (p.x + tileRect.width > 0 && p.x < screenWidth &&
  70.                 p.y + tileRect.height > 0 && p.y < screenHeight) {
  71.                
  72.                 worldBitmap.copyPixels(tiles[map[i][j]-1],  tileRect,  p, null, null, true);
  73.             }
  74.            
  75.         }
  76.     }
  77.    
  78.     //world.copyPixels(buffer, screenRect, new Point(0,0));
  79.    
  80.    
  81.     bufferClip.swapDepths(screenClip);
  82.    
  83.    
  84. }


ansehen: http://www.bungartbessler.com/test/bitmaptest2.html

download: http://www.bungartbessler.com/test/tilebasedTest.zip
__________________
Wieviel hätte ich also für dieses Fahrzeug zu investieren???
K-Grabowski ist offline   Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

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

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



Alle Zeitangaben in WEZ +1. Es ist jetzt 18:12 Uhr.

Domains, Webhosting & Vserver von Host Europe
Unterstützt das Flashforum!
Adobe User Group


Copyright ©1999 – 2012 Marc Thiele