Advertisement
Guest User

Blitting begins!

a guest
Jun 8th, 2014
262
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.16 KB | None | 0 0
  1. package
  2. {
  3. import flash.display.Sprite;
  4. import flash.events.Event;
  5. import flash.display.Bitmap;
  6. import flash.display.BitmapData;
  7. import flash.geom.Point;
  8. import flash.geom.Rectangle;
  9.  
  10. public class Main extends Sprite
  11. {
  12. [Embed(source = "../Images/Background.png")]
  13. private var background:Class;
  14.  
  15. [Embed(source = "../Images/uiToolbar.png")]
  16. private var UI:Class;
  17.  
  18. [Embed(source="../Images/Test.png")]
  19. private var test:Class;
  20.  
  21. private var pointBG: Point;
  22. private var pointUI: Point;
  23. private var rectBG: Rectangle;
  24. private var rectUI: Rectangle;
  25. private var rectUnit: Rectangle;
  26.  
  27. private var _screen:BitmapData;
  28. private var bg:BitmapData;
  29. private var ui:BitmapData;
  30. private var spriteData: BitmapData;
  31.  
  32. private var stats:Stats;
  33. private var sprites:Vector.<SpriteClass>;
  34. private var sprite:SpriteClass;
  35.  
  36. private var i:int;
  37. private var count:int = 40; //160
  38. private var xNum:Number;
  39. private var yNum:Number;
  40. private var frameCount:int;
  41.  
  42. public function Main():void
  43. {
  44. bg = (new background()).bitmapData;
  45. rectBG = bg.rect;
  46. pointBG = bg.rect.topLeft;
  47. ui = (new UI()).bitmapData;
  48. rectUI = ui.rect;
  49. pointUI = ui.rect.topLeft;
  50. pointUI.y = 390;
  51.  
  52. _screen = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0xCCCCCC); // building my only displayobject
  53. addChild(new Bitmap(_screen)); // adding it to the stage and keeping a ref to datas
  54.  
  55. stats = new Stats();
  56. addChild(stats);
  57.  
  58. spriteData = (new test()).bitmapData;
  59. rectUnit = spriteData.rect;
  60.  
  61. sprites = new Vector.<SpriteClass>();
  62. for (i = 0; i < count; i++)
  63. {
  64. sprite = new SpriteClass();
  65. sprite.destX = 300 + 20*(i%4);
  66. sprite.destY = 250; // + 10*(int(Math.random()*4));
  67. sprite.x = int(Math.random() * 700);
  68. sprite.y = int(Math.random() * 500);
  69. sprite.position = new Point(sprite.x, sprite.y);
  70. sprites.push(sprite);
  71. }
  72.  
  73. frameCount = 0;
  74. addEventListener(Event.ENTER_FRAME, MainEngine);
  75. }
  76.  
  77. private function MainEngine(e:Event):void
  78. {
  79. _screen.copyPixels(bg, rectBG, pointBG);
  80. _screen.copyPixels(ui, rectUI, pointUI);
  81. _screen.lock();
  82. for (i = 0; i < count; i++)
  83. {
  84. sprites[i].Update();
  85. _screen.copyPixels(spriteData, rectUnit, sprites[i].position);
  86. }
  87. _screen.unlock();
  88. frameCount++;
  89. }
  90.  
  91. }
  92.  
  93. }
  94.  
  95. import flash.geom.Point;
  96.  
  97. class SpriteClass
  98. {
  99. public var x:Number;
  100. public var y:Number;
  101. public var destX:Number;
  102. public var destY:Number;
  103. public var speed:Number;
  104. public var remainingMoveRate:Number;
  105.  
  106. public var position: Point;
  107.  
  108. private var a:Number;
  109. private var b:Number;
  110. private var xDelta:Number;
  111. private var yDelta:Number;
  112. private var maxMoveSquared:Number;
  113. private var unitAlpha:Number;
  114.  
  115. public function SpriteClass()
  116. {
  117. speed = 5.5;
  118. remainingMoveRate = speed;
  119. }
  120.  
  121. public function Update():void
  122. {
  123. MoveUnit();
  124. position.x = x;
  125. position.y = y;
  126. }
  127.  
  128. public function scalingUnit():void{
  129. //bitmapCanvas.scaleX = 0.75+((y-190)/400);
  130. //bitmapCanvas.scaleY = 0.75+((y-190)/400);
  131. }
  132.  
  133. public function MoveUnit():Boolean
  134. {
  135. a = Math.abs(destX - x);
  136. b = Math.abs(destY - y);
  137.  
  138. if (remainingMoveRate > 1e-4) {
  139. // Check if the unit can reach the dest coordinates immediately.
  140. maxMoveSquared = a * a + b * b;
  141. if (maxMoveSquared <= remainingMoveRate * remainingMoveRate) {
  142. x = destX;
  143. y = destY;
  144. //scalingUnit();
  145. remainingMoveRate -= Math.sqrt(maxMoveSquared);
  146. return true; // Indicate that the unit has reached its dest.
  147. }
  148.  
  149. // Determine the point where the unit will wind up in on its way
  150. // to (destX, destY).
  151. unitAlpha = Math.atan(b / a);
  152. xDelta = Math.cos(unitAlpha) * speed;
  153. yDelta = Math.sin(unitAlpha) * speed;
  154. destX > x ? x += xDelta : x -= xDelta;
  155. if(b > 1e-4){
  156. destY > y ? y += yDelta : y -= yDelta;
  157. //scalingUnit();
  158. }
  159. }
  160.  
  161. // Restore the remaining move rate for the next frame.
  162. remainingMoveRate = speed;
  163.  
  164. // Indicate that the unit has not arrived at its dest yet.
  165. return false;
  166. } // public function move
  167. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement