gpt4 book ai didi

javascript - Craftyjs Canvas 旋转

转载 作者:行者123 更新时间:2023-11-28 06:09:58 24 4
gpt4 key购买 nike

如果我将 e1 属性 y 更改为 1 或其他正值,则此代码可以工作,但如果 y 为 0 或负值,则它会失败。没有错误,但形状没有出现。如果我绘制其他类型的形状,也会出现同样的问题。无论如何,0、90、271 等旋转值与 y: 0 一起工作。x 值则不存在这样的问题。这是为什么?这是与 Crafty.js 相关的错误吗?

<script>
Crafty.init(480,680, document.getElementById('test'));

Crafty.c("myComponent", {
init: function () {
this.requires("2D, Canvas");
this.bind("Draw", this._draw_me);
this.ready = true;
},
_draw_me: function (e) {
var ctx = e.ctx;

ctx.beginPath();
ctx.moveTo(e.pos._x, e.pos._y);
ctx.lineTo(e.pos._x + e.pos._w, e.pos._y);
ctx.lineTo(e.pos._x + e.pos._w/2, e.pos._y + e.pos._h);
ctx.lineTo(e.pos._x, e.pos._y);

ctx.fillStyle = "blue";
ctx.fill();
}
});

var e1 = Crafty.e("myComponent")
.attr({x: 100, y: 0, w: 60, h: 60, rotation:180})
.origin("center");
</script>

最佳答案

在设置原点之前设置wh。在设置旋转之前先设置旋转原点。
这应该在 API 文档中清楚地记录下来,我继续打开 an issue for that on Crafty's issue tracker .

如果您在旋转后设置原点,事情会以某种方式变得困惑,并且 _draw_me 函数永远不会被调用,因为 Crafty 认为三 Angular 形位于视口(viewport)(相机)之外并且不需要被画下来。 (观察设置 Crafty.viewport.y = 100 时会发生什么 - 出现三 Angular 形)

以下代码片段对我有用。代码按顺序设置 whoriginrotation

Crafty.init();

Crafty.c("myComponent", {
init: function () {
this.requires("2D, Canvas");
this.bind("Draw", this._draw_me);
this.ready = true;
},
_draw_me: function (e) {
var ctx = e.ctx;

ctx.beginPath();
ctx.moveTo(e.pos._x, e.pos._y);
ctx.lineTo(e.pos._x + e.pos._w, e.pos._y);
ctx.lineTo(e.pos._x + e.pos._w/2, e.pos._y + e.pos._h);
ctx.lineTo(e.pos._x, e.pos._y);

ctx.fillStyle = "blue";
ctx.fill();
}
});

var e1 = Crafty.e("myComponent")
.attr({w: 60, h: 60})
.origin("center")
.attr({x: 100, y: 0, rotation: 180});
<script src="https://github.com/craftyjs/Crafty/releases/download/0.7.1/crafty-min.js"></script>

关于javascript - Craftyjs Canvas 旋转,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36498365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com