Vanilla JS Tutorials

JsIso Tutorials

RSS feed

04 - Rotating JsIso Isometric Map

In this example we introduce the 'jsiso/canvas/Input' module. We apply an event listener for keyboard input and when the buttons Q or W is pressed we rotate. At this point we then clear the current drawn image and redraw from the rotated perspective.


require([
      'jsiso/canvas/Control',
      'jsiso/tile/Field',
      'jsiso/img/load',
      'jsiso/canvas/Input',
      'requirejs/domReady!'
    ],
    function(CanvasControl, TileField, imgLoad, CanvasInput) {

      // RGBA of color to use
      var tileColor = "(158, 154, 255, 1)";
      var groundColor =  "(100, 154, 100, 1)";

      // Our Tile Map
      var tileMap = [
        [groundColor, groundColor, groundColor, groundColor, groundColor, groundColor, groundColor],
        [groundColor, tileColor, groundColor, tileColor, groundColor, tileColor, groundColor],
        [groundColor, tileColor, tileColor, tileColor, groundColor, tileColor, groundColor],
        [groundColor, tileColor, groundColor, tileColor, groundColor, tileColor, groundColor],
        [groundColor, groundColor, groundColor, groundColor, groundColor, groundColor, groundColor]
      ]

      // Our Height Map 
      var tileHeightMap = [
        [0,0,0,0,0,0,0],
        [0,1,0,1,0,1,0],
        [0,1,1,1,0,2,0],
        [0,4,0,4,0,3,0],
        [0,0,0,0,0,0,0]
      ]

      // X & Y drawing position, and tile span to draw 
      var xrange = 8;
      var yrange = 8;

      // use CanvasControl to create a simple canvas element
      // ID of Canvas,
      // width of Canvas,
      // Height of Canvas,
      // Optioanl: Any Style proprties we wish to apply,
      // Optional: The DOM ID location we wish to place the canvas in, otherwise it appends to Body
      var context = CanvasControl.create("canavas", 640, 640, {});

      var tileLayer = new TileField(context, CanvasControl().height, CanvasControl().width);

      var input = new CanvasInput(document, CanvasControl());  // Create our Input controls and pass through the CanvasControl to it
      input.keyboard(function(pressed, keydown) { // Pressed is the keycode of user input, and keydown means the button is down rather than press ended
        if (!keydown) {
          switch(pressed) {
            case 81:
              tileLayer.rotate("left");
              // Call draw Tile Map function
              drawTileMap();
            break;
            case 87:
              tileLayer.rotate("right");
              // Call draw Tile Map function
              drawTileMap();
            break;
          }
        }
      });


      var images = [
        {
          graphics: [
            "/img/game/ground/blank-block.png" // The images we want to load using imgLoader
          ]
        }
      ];


      function drawTileMap() {
        // Clear drawn map before clearing
        context.clearRect(0, 0, CanvasControl().width, CanvasControl().height);
        // Loop through our tiles and draw the map  
        for (i = 0; i < 0 + xrange; i++) {
          for (j = 0; j < 0 + yrange; j++) {
            tileLayer.draw(i,j);
          }
        }
      }


      imgLoad(images).then(function(imgResponse) { // imgLoad uses Promises, once the images have loaded we continue and use the returned imgResponse

        tileLayer.setup({
          layout: tileMap,
          isometric: true, // Flag used to layout grid in non isometric format
          tileHeight: 50,
          tileWidth: 100,
          heightMap: {
            map: tileHeightMap,
            heightTile: imgResponse[0].files["blank-block.png"], // imgResponse[0] contains the files[] we placed in the graphcis array for loading
            offset: 0
          },
          shadow: {
            offset: 50, // Offset is the same height as the stack tile
            verticalColor: '(5, 5, 30, 0.4)',
            horizontalColor: '(6, 5, 50, 0.5)'
          }
        });

        // Rotate our entire Map 
        tileLayer.rotate("left");

        // Set an offset so our map is on screen
        tileLayer.setOffset(200, 100)
        
        // Call draw Tile Map function
        drawTileMap();
      });
    });

Check out the View Source to see tutorial.
Q & W to rotate.

Tutorial Outcome (View & Run Source)

36 comments

  1. Nice post! Thanks for sharing.
    https://www.pestproofva.com/

    — Neil Mon, 1 Apr 2019

  2. I have been looking for this information for a long time, I was very surprised when I found it here.

    10.0.0.1 Thu, 4 Apr 2019

  3. Would appreciate any link on a video for this tutorial. Im still learning things.

    screen repair melbourne fl Thu, 23 May 2019

  4. I would like to thank for the efforts you have made in writing this post. I am hoping the same best work from you in the future as well. candy crush soda saga

    — samuelddarden Wed, 29 May 2019

  5. air conditioning replace great post i wish more people would make comments on this.

    don king Sun, 9 Jun 2019

  6. tree service outstanding content! If i had a few more sites I would comment them. O wait.. I DO!
    Boom! bathroom remodeling company elkhorn ne
    seo for hvac companies
    iowa excavating company
    tow truck orlando fl
    ford dealer brevard county

    Ripmane Sun, 9 Jun 2019

  7. I have no a clear idea about this. If any one have more information and to like to share this then please post his/her comment. I am very thank full for this act of kindness. i will come back soon is you have more idea about this. 100% commission Tampa

    — Joshua A. Price Mon, 10 Jun 2019

  8. I have been longing to learn all of this since then.

    junkyard davie fl Tue, 25 Jun 2019

  9. This is dope. How did you do this?

    stamped concrete birmingham al Mon, 1 Jul 2019

  10. The layering techniques is quite simple but direct. Would love to try this techniques on my own.

    line markers perth Tue, 2 Jul 2019

  11. Your way of putting things together is admirable. Unfortunately, Im still quite in the dark about all of this so I'll prolly come back when I can contribute a more decent comment. tree service

    — fredluis Wed, 10 Jul 2019

  12. Thanks for sharing your knowledge with us! This is great. | Villa Bellissima

    — Daniel Mon, 15 Jul 2019

  13. Congratulate me for making a successful project because of your post! Hahaha! I can't thank you enough! :D

    nextride Tue, 23 Jul 2019

  14. We are really grateful for your blog post. You will find a lot of approaches after visiting your post. Great work tech blogs

    — tech blogs Wed, 24 Jul 2019

  15. Much thanks for composing such an intriguing article on this point. This has truly made me think and I plan to peruse more Okra

    — Okra Thu, 25 Jul 2019

  16. Much thanks for composing such an intriguing article on this point. This has truly made me think and I plan to peruse more Okra

    — Okra Thu, 25 Jul 2019

  17. I am a new user of this site so here i saw multiple articles and posts posted by this site,I curious more interest in some of them hope you will give more information on this topics in your next articles. Cucumber

    — Cucumber Thu, 25 Jul 2019

  18. I am a new user of this site so here i saw multiple articles and posts posted by this site,I curious more interest in some of them hope you will give more information on this topics in your next articles. Cucumber

    — Cucumber Thu, 25 Jul 2019

  19. Very nice blog and articles. I am realy very happy to visit your blog. Now I am found which I actually want. I check your blog everyday and try to learn something from your blog. Thank you and waiting for your new post. Lemongrass

    — Lemongrass Thu, 25 Jul 2019

  20. This is an excellent post I seen thanks to share it. It is really what I wanted to see hope in future you will continue for sharing such a excellent post. 13 Zodiac Signs

    — 13 Zodiac Signs Thu, 25 Jul 2019

  21. It proved to be Very helpful to me and I am sure to all the commentators here! Text Chemistry

    — Text Chemistry Thu, 25 Jul 2019

  22. After reading your article I was amazed. I know that you explain it very well. And I hope that other readers will also experience how I feel after reading your article. Brown Rice

    — Brown Rice Thu, 25 Jul 2019

  23. This is really very nice post you shared, i like the post, thanks for sharing.. Quinoa

    — Quinoa Thu, 25 Jul 2019

  24. This is a good post. This post gives truly quality information. I’m definitely going to look into it. Really very useful tips are provided here. Thank you so much. Keep up the good works Coconut Water

    — Coconut Water Thu, 25 Jul 2019

  25. I adore this tutorial , wonderful content material! super why! phonics fair

    — SAMS Thu, 1 Aug 2019

  26. After reading your article I was amazed. I know that you explain it very well. And I hope that other readers will also experience how I feel after reading your article. Mesa Locksmith

    — Mesa Locksmith Sat, 3 Aug 2019

  27. This is an excellent post I seen thanks to share it. It is really what I wanted to see hope in future you will continue for sharing such a excellent post. locksmith Atlanta

    — locksmith Atlanta Sat, 3 Aug 2019

  28. Thanks for sharing the code for the Rotating JsIso Isometric Map. This will be helpful for our Limited Liability Company.

    — Billy Martinez Mon, 12 Aug 2019

  29. Good day very nice site!! Man .. Excellent .. Wonderful .. electrician Orlando

    — Cassandra D. Everhart Tue, 20 Aug 2019

  30. Thanks for sharing these tutorials. I learnt a lot here and I'll always keep coming back for more tutorials.
    towingviennava.com
    towingtysonsva.com
    towingfairfaxva.com
    towingashburnva.com
    towingherndonva.com
    towingchantillyva.com


    — Mike Double Tue, 20 Aug 2019

  31. Thanks for the effort you provide to share this post!
    Pensacola Emergency Towing Service

    — Mark Tue, 20 Aug 2019

  32. Op onze website vindt u verschillende types kamersteigers.
    Belangrijk is te weten wat de verschillen zijn tussen al dit aanbod.
    Allereerst belangrijk om te weten of de werkhoogte naderhand
    aangepast kan worden, bij sommige typen is dat mogelijk bij
    andere typen kamersteigers is dit absoluut niet mogelijk.
    Is het mogelijk om een luik te plaatsen of zijn de wielen
    aanpasbaar of te vervangen voor bijvoorbeeld andere ondergrond?
    Voordat u tot koop overgaat moet het gebruik van de steiger
    duidelijk zijn om teleurstellingen later te voorkomen!
    Daar koop u tenslotte geen steiger voor. Ons meest populaire
    merk voor dit artikel merk Euroscaffold met een werkhoogte
    van 3 meter, deze is uitbreidbaar en heeft meerdere opties! Verschil tussen kamersteigers

    — muneer ahmed Sat, 31 Aug 2019

  33. Bron: Wikipedia. Een touringcar is een luxueuze autobus, die
    gebruikt wordt voor personenvervoer over korte en grotere
    afstanden. Een tegenwoordige touringcar verschilt van een
    stads- of streekbus op onder meer de volgende punten:
    Er zijn meer zitplaatsen (meestal vier op een rij met
    een smal gangpad) terwijl een stadsbus vaak maar drie zit-
    plaatsen op een rij heeft en een breder gangpad. De
    inrichting van de bus is gericht op comfort.

    Onder in de bus is een grote bagageruimte gecreëerd. De bus
    is hierdoor hoger, en heeft derhalve een hoge instap.
    Met het oog op comfort (beter optrekken) zijn touringcars
    vaak uitgerust met een handgeschakelde versnellingsbak,
    hoewel tegenwoordig ook steeds meer touringcars met een
    goed afgestelde automaat worden uitgerust. Een moderne
    touringcar heeft vaak een toilet, een koelkast en
    dvd-(tv)-systeem. Er is een slaapcabine voor de chauffeur(s)
    voor met name buitenlandse lange ritten naar veelal vakantie-
    bestemmingen in Europa. Touringcarverhuur bedrijven worden
    veelal ingeschakeld voor groepsvervoer, zoals voor uitjes,
    grote evenmenten, jaarlijkse schoolreisjes en natuurlijk
    ook naar vakantiebestemmingen in het buitenland. Touringcar- en busverhuurbedrijven

    — muneer ahmed Tue, 3 Sep 2019

  34. Eigenlijk al jaren staat het contractvervoer binnen de taxibranche
    onder een hoge druk van bezuinigen. Daarnaast is hier een felle
    concurrentie van toepassing als het gaat om aanbestedingen.
    De taxibranche zet contractvervoer laag in om te overleven.
    Zij gaan liever aan het werk voor weinig geld dan dat zij
    een faillissement boven het hoofd hangt. Tevens voorkomen zij
    dat er zomaar naar een ander taxibedrijf wordt overgestapt
    aangezien de kosten al extreem laag zijn. Echter is deze methode
    wel gevaarlijk voor de taxiondernemers die hier op deze
    manier op inspelen inzake deze contracvervoer constructies. Taxibranche contractvervoer

    — muneer Tue, 3 Sep 2019

  35. Ons kattenhotel heeft een ruime buitenren met voldoende beschutting
    tegen zon, regen en wind. Binnen beschikt het kattenpension over
    vloerverwarming en alle ruimtes zijn voorzien van mechanische ventilatie.
    Comfortabel voor de gasten en een garantie voor een altijd schone
    en frisse omgeving. De buitenren is uiteraard volledig afgesloten
    zodat uw poes of kat niet kan ontsnappen. Buitenren voor katten

    — muneer ahmed Thu, 5 Sep 2019

  36. "Professor Peter Hajek concludeert dat de onderzoekers de vloeistof
    hebben oververhit bij en verdampen / roken e-sigaret. Bij normaal
    gebruik komt er geen formaldehyde vrij. Zijn conclusie: Wanneer je
    kip laat verbranden dan is het eten van de zwart verbrande korst
    kankerverwekkend. Echter kun je daarmee niet stellen dat de kip
    kankerverwekkend is. De komende jaren zullen ongetwijffeld nieuwe
    studies meer inzicht geven." Uitkomst Portlandonderzoek omstreden

    — muneer ahmed Sat, 14 Sep 2019

Please insert the result of the arithmetical operation from the following image:

Please insert the result of the arithmetical operation from this image. =