Advertisement
Guest User

Untitled

a guest
Sep 23rd, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.26 KB | None | 0 0
  1. package;
  2.  
  3. import flash.Lib;
  4. import flixel.FlxG;
  5. import flixel.FlxSprite;
  6. import flixel.FlxState;
  7. import flixel.effects.FlxRenderTarget;
  8. import flixel.system.FlxAssets.FlxShader;
  9. import flixel.util.FlxColor;
  10.  
  11. /**
  12. * ...
  13. * @author Zaphod
  14. */
  15. class RenderTargetState extends FlxState
  16. {
  17. var renderTexture:FlxRenderTarget;
  18. var s2:FlxSprite;
  19.  
  20. override public function create():Void
  21. {
  22. // just some test sprites
  23. var s1:FlxSprite = new FlxSprite();
  24. s2 = new FlxSprite(200, 0);
  25.  
  26. s1.alpha = 0.5;
  27. s2.shader = new Invert2();
  28.  
  29. // we need to add our sprites to state, so they will start rendering and updating.
  30. // (TODO: maybe add them to render textures instead, so render textures will be flxgroups instead of flxsprite??? probably i will change this)
  31. add(s1);
  32. add(s2);
  33.  
  34. // create render target with the size of 256 by 512 pixels
  35. renderTexture = new FlxRenderTarget(256, 512);
  36. // you can set clear color for render target (if you want it to have some color background)
  37. // but it's optional (default color is FlxColor.TRANSPARENT).
  38. // And you can even not clear render texture before each rendering, by setting `renderTexture.clearBeforeRender = false;`
  39. // or you can set some semitransparent clear color, so previous drawn states will be fading away.
  40. renderTexture.clearColor = FlxColor.RED;
  41. // specify camera which will be used for calculation of drawable sprites positions on this render texture.
  42. // basically this property will override `cameras` property for all sprites added to this render target.
  43. renderTexture.renderCamera = FlxG.camera;
  44. add(renderTexture);
  45. // set object's renderTarget, so it will be rendered ONLY on this texture and WON'T APPEAR on any other camera.
  46. // if you want object to be rendered on some camera also, then you will have to override its `draw()` method.
  47. // (Tell me if you want such functionality built in flixel core).
  48. s1.renderTarget = renderTexture;
  49.  
  50. // because render target is a sprite, you can set its position, alpha, rotation, scale, etc...
  51. // (try to play with it)...
  52. renderTexture.y = 100;
  53.  
  54. // set render pass shader (it's optional, but what's the point of this then???).
  55. // (it could be cheaper to draw all sprites on texture and then apply shader effect on them,
  56. // than to render each of the sprites with shader).
  57. renderTexture.shader = new Invert2();
  58.  
  59. // you can render one render target to another
  60. // 1. let's create another render target
  61. var renderTexture2:FlxRenderTarget = new FlxRenderTarget(512, 256);
  62. // 2. specify camera which will be used for calculation of drawable sprites positions on this render texture.
  63. // (TODO: add ability to set renderCamera in constructor).
  64. renderTexture2.renderCamera = FlxG.camera;
  65. add(renderTexture2);
  66. // 3. set this render texture as render target for our first render target.
  67. // renderTexture.renderTarget = renderTexture2; // uncomment this line to see clipping effect.
  68. }
  69.  
  70. override public function update(elapsed:Float):Void
  71. {
  72. super.update(elapsed);
  73.  
  74. renderTexture.x = 0.5 * FlxG.width + Math.sin(Lib.getTimer() / 1000) * FlxG.width * 0.25;
  75. }
  76.  
  77. override public function draw():Void
  78. {
  79. renderTexture.drawObject(s2); // render s2 sprite on render texture first
  80.  
  81. // then draw everything else (and s2 sprite on the camera)
  82. super.draw();
  83. }
  84. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement