Guest User

Untitled

a guest
Jan 20th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.25 KB | None | 0 0
  1. package ca.esdot.lib.display
  2. {
  3. import avmplus.getQualifiedClassName;
  4.  
  5. import flash.display.Bitmap;
  6. import flash.display.BitmapData;
  7. import flash.display.Sprite;
  8. import flash.geom.Point;
  9. import flash.geom.Rectangle;
  10. import flash.utils.Dictionary;
  11.  
  12. public class BlitClip extends Bitmap
  13. {
  14. protected static var frameCacheByAsset:Object = {};
  15. protected var _currentStartFrame:int = 1;
  16. protected var _currentEndFrame:int = 20;
  17. protected var _currentFrame:int = 1;
  18. protected var frameCache:Object;
  19.  
  20. public function BlitClip(bitmapAsset:Class, jsonAsset:Class){
  21.  
  22. //Check cache, if we have a cache us it.
  23. if(frameCacheByAsset[getQualifiedClassName(bitmapAsset)])
  24. {
  25. frameCache = frameCacheByAsset[getQualifiedClassName(bitmapAsset)];
  26. }
  27. //If not cached, rip frames from bitmapData and grab json
  28. else {
  29.  
  30. var data:Object = JSON.parse(new jsonAsset().toString());
  31. var bitmap:Bitmap = new bitmapAsset();
  32. var spriteSheet:BitmapData = bitmap.bitmapData;
  33.  
  34. //todo: use JSON
  35. var frameWidth:int = 186;
  36. var frameHeight:int = 176;
  37. var cols:int = spriteSheet.width/frameWidth|0;
  38. var rows:int = spriteSheet.height/frameHeight|0;
  39.  
  40. frameCache = [];
  41.  
  42. for(var i:int = 0; i < 20; i++){
  43. var col:int = i%cols;
  44. var row:int = i/cols|0;
  45. var bmpData:BitmapData = new BitmapData(frameWidth, frameHeight, true, 0x0);
  46. bmpData.copyPixels(spriteSheet, new Rectangle(frameWidth*col, frameHeight*row, frameWidth, frameHeight), new Point());
  47. frameCache[i] = bmpData;
  48. }
  49. //add data to static cache
  50. frameCacheByAsset[getQualifiedClassName(bitmapAsset)] = frameCache;
  51. }
  52. //Show frame 1
  53. this.bitmapData = frameCache[_currentStartFrame-1];
  54. }
  55.  
  56. override public function set bitmapData(value:BitmapData):void {
  57. super.bitmapData = value;
  58. smoothing = true;
  59. }
  60.  
  61. public function tick():void {
  62. if(_currentFrame > _currentEndFrame){
  63. _currentFrame = _currentStartFrame;
  64. }
  65. currentFrame = _currentFrame;
  66. _currentFrame++;
  67. }
  68.  
  69. public function set currentFrame(value:int):void {
  70. _currentFrame = Math.max(0, Math.min(frameCache.length, value));
  71. this.bitmapData = frameCache[_currentFrame-1];
  72. }
  73. }
  74. }
Add Comment
Please, Sign In to add comment