javascript - html Canvas 中的等距立方体投影

标签 javascript html isometric

如何在 canvas 2d 中制作等距立方体?我关注了True Isometric Projection with HTML5 Canvas获得立方体的顶部,但是如何获得左侧和右侧?

注意:我想使用具有完整事件处理功能的 Kinetic.js 对象。

这是我现在拥有的:

<!DOCTYPE HTML>
<html>
  <head>
    <style>
      body {
        margin: 0px;
        padding: 0px;
      }
      canvas {
        border: 1px solid #9C9898;
      }
    </style>
    <script src="http://www.html5canvastutorials.com/libraries/kinetic-v4.0.0.js"></script>
    <script>
      window.onload = function() {
        var stage = new Kinetic.Stage({
          container: "container",
          width: 578,
          height: 200,
          //scale: [1, 0.5],
          //scale: [1, 0.86062],
          //rotation: -30 * Math.PI /180,
        });

        var layer = new Kinetic.Layer({
            scale: [1,0.5],
        });

        var foo = false;

        layer.beforeDraw(function(){
            if (!foo) {
                var context = this.getContext();
                var sx = 45*Math.PI/180;
                // .75 horizontal shear
                var sy = 0;
                // no vertical shear

                // apply custom transform
                //context.transform(1, sy, sx, 1, 0, 0);
                //context.scale(1, 0.5);
                //context.rotate(45 * Math.PI /180);
                //var angle = 30;
                //context.setTransform(1, Math.tan(30), 0, 1, 0, 0);
            }
            foo = true;

        });



        layer.afterDraw(function(){
            var context = this.getContext();

            //context.scale(1, 2);
            //context.rotate(-45 * Math.PI /180);

        });



        var rect = new Kinetic.Rect({
          x: 200,
          y: 100,
          width: 50,
          height: 50,
          fill: "blue",
          stroke: "black",
          strokeWidth: 4,

          rotation: -45 * Math.PI /180,
          //scale: [1, 0.5],

        });





        rect.on("mouseover", function() {
                //alert(this.getFill());
                this.setFill("red");

                layer.draw();
         });   

         rect.on("mouseout", function() {
                //alert(this.getFill());
                this.setFill("blue");

                layer.draw();
         });  

        // add the shape to the layer
        layer.add(rect);

    // add the layer to the stage
    stage.add(layer);

  };

</script>

演示:http://jsfiddle.net/F5SzS/

最佳答案

也许改用多边形?这是一个例子;

http://jsfiddle.net/Ygnbb/

我将 3 个部分分开,但我想您可以将其作为一个 ploygon 来完成。虽然位置和大小需要一些调整......

关于javascript - html Canvas 中的等距立方体投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12221192/

相关文章:

显示站点上的 Javascript/CSS 问题

html - 如何调整 webview 内容(包括图像)的大小以水平适应边界

html - 在页面中居中导航列表

html - 如何使图层在 slider 旋转中消失?

c - 等距瓷砖拾取/选择算法

Java 鼠标在钻石平铺 map 上采摘

javascript - 我的 Math max 函数出了什么问题?

javascript - 在 django 中接收嵌套的 JSON 对象

javascript - 在日期选择器中,当我将日期与日期放在一起时,下拉列表会消失

java - 等距图 block 生成