• References
    • Main
    • RenderKit
    • LibJS
    • Canvas
  • Components
    • Overview
    • Page
    • Basic
      • Rectangle
      • Text
      • Button
      • HTML Article
      • Toggle Button
      • Tiler
      • Web View
      • Image Zoomer
    • Navigation
      • Carousel
    • Forms
      • Form
      • Text Entry
    • Layout
      • Group
  • Web API
  • Tutorials
  • Contact
Menu
  • References
    • Main
    • RenderKit
    • LibJS
    • Canvas
  • Components
    • Overview
    • Page
    • Basic
      • Rectangle
      • Text
      • Button
      • HTML Article
      • Toggle Button
      • Tiler
      • Web View
      • Image Zoomer
    • Navigation
      • Carousel
    • Forms
      • Form
      • Text Entry
    • Layout
      • Group
  • Web API
  • Tutorials
  • Contact
Umajin Developer > RenderKit > Creating an Animated Shape using RenderKit
Creating an Animated Shape using RenderKit
RenderKit
  
April 18, 2017
  
David Brebner

This is an extended example of the RenderKit Component being used as a base for a Custom Component. The RenderKit has a number of special attributes and features which make it ideal for situations where you need to get lower level access to the Umajin system than other base components give you. It has custom properties and can animate every frame using the on_tick event – see more features in the RenderKit language reference.

This example uses getData and setData to manage storing data locally for each instance of this component and draws a SIN wave on the RenderKit canvas.

Note: using the on_tick event incorrectly can cause major performance issues if time consuming procedures are run within it, so use this event carefully.

// register a component with a frequency slider which will contain a RenderKit
// on the RenderKit we will make an animating Sin curve
registerComponent("rk_shape", "", "rk_shape", "RK Shape", "rk_shape_init", "rk_shape_resize", "rk_shape_refresh", "real:frequency:1:1:5", "");

function rk_shape_init(width, height){
  // create a RenderKit
  var rk = createComponent(self, "renderkit", 0, 0, 100, 100);
  // create a shape
  var id = renderkitShapeCreate(rk, "");
  setData(rk,"shape_id",id);
  // register for the per frame tick event
  bindEvent(rk,"on_tick","rk_shape_on_tick");
}

var cnt = 0;
function rk_shape_on_tick(){
  rk_shape_draw(self);
  //increment the offset into the Sin curve
  cnt += 0.1;
}

function rk_shape_resize(width, height){
  // get the renderkit from the parent and draw
  var rk = getComponentChild(self,0);
  rk_shape_draw(rk);
}

function rk_shape_refresh(width, height){
  //set the frequency value into the internal renderkit and draw
  var frequency = getData(self, "frequency");
  var rk = getComponentChild(self,0);
  setData(rk, "frequency", frequency);
  rk_shape_draw(rk);
}

function rk_shape_draw(rk){
  // check size of renderkit in local units
  var width = getProperty(rk, "width");
  var height2 = getProperty(rk, "height") / 2.0;
  var frequency = getData(rk, "frequency");
  var id = getData(rk,"shape_id");
  // clear the shape
  renderkitShapeClear(rk,id);
  //setup the start of the curve
  var y = height2 + Math.sin(cnt + ((a * 0.0628) * frequency)) * height2;
  renderkitShapeDoMove(rk,id,y,100);
  // draw the lines of a sin curve
  for (var a = 0; a < 101; a++){
    var y = height2 + Math.sin(cnt + ((a * 0.0628) * frequency)) * height2;
    renderkitShapeDoLine(rk,id,a * width / 100.0, y);
  }
}

 

  • Developer Home
  • Umajin Home
  • Support Home
Menu
  • Developer Home
  • Umajin Home
  • Support Home