3

これらの 2 つの png 画像をキャンバス上で単純に回転させようとしています。ホイールがキャンバスに回転するときにホイールの特定のセクションのみを表示したいため、画像はキャンバスよりも大きくなっています。キャンバス上に完全にpng​​を取得しました。それらは円形で、下部に配置され、中央に配置されているため、ホイールのそのセクションのみが表示されます。私のコードでは、easl と tween を使用して createjs を使用しています。何らかの理由で画像を回転すると、ランダムな登録ポイントから回転します。この画像をキャンバス領域の外にある独自の中心を中心に回転させる方法はありますか?

var CANVAS;
var STAGE;
var CTX;

var imageCount = 0;

var img1Obj = new Image();
var img2Obj = new Image();
var img3Obj = new Image();

var img1;
var img2;
var img3;

var box;

function init(){

    CANVAS  = document.getElementById("spinWheel");
    STAGE   = new createjs.Stage(CANVAS);
    CTX     = CANVAS.getContext('2d');  

    img1Obj.src = "img/iphone_wheel_outer.png";
    img2Obj.src = "img/iphone_wheel_middle.png";
    img3Obj.src = "img/iphone_wheel_inner.png";

    img1Obj.name = "img1";
    img2Obj.name = "img2";
    img3Obj.name = "img3";

    img1Obj.onload = loadImages;
    img2Obj.onload = loadImages;
    img3Obj.onload = loadImages;

    createjs.Ticker.setFPS(30);
    createjs.Ticker.addListener(STAGE);

}


function loadImages(e)
{
    if(e.target.name == 'img1'){img1 = new createjs.Bitmap(img1Obj); }
    if(e.target.name == 'img2'){img2 = new createjs.Bitmap(img2Obj); }
    if(e.target.name == 'img3'){img3 = new createjs.Bitmap(img3Obj); }

    imageCount++;

    /* Display graphics until all of them are loaded */

    if(imageCount == 3)
    {
        buildInterface();
    }
}

function buildInterface(){


    img1.x = -370;
    img2.x = -370;
    img3.x = -370;

    img1.y = 235;
    img2.y = 235;
    img3.y = 235;

    createjs.Tween.get(img1,{loop:true})
            .to({rotation : 360}, 2000);


    STAGE.addChild(img1, img2, img3, box);

}

$(document).ready(function() {
    init();
}); 
4

3 に答える 3

1

私はついにそれを理解しました。

コンテキストを回転するように指示するここでの答えは間違っていません。Imがcreatejs.Bitmapを使用してキャンバスに画像を生成する場合は機能しません。ただし、実際にはcreatejsライブラリを使用する方がはるかに簡単です。私がしなければならないのは:

img1.regX   = img1.image.width/2|0;
img1.regY   = img1.image.height/2|0;

これは実際にはビットマップの登録ポイントを直接対象としており、createjs.Bitmapオブジェクトが内部でこれを処理するため、コンテキストを操作する必要はありません。

とにかく助けてくれてありがとう!

于 2012-09-28T21:08:51.747 に答える
0

キャンバス上で回転するには、次の操作を行う必要があります。

context.translate(cx, cy);
context.rotate   (radians);

しかし、それが createjs.Bitmap オブジェクトで機能するかどうかはわかりません。試してみる必要があります。移動は、回転するポイントを設定します。

多分試してください:

img1.translate((.5*img1.width),(.5*img1.height));

これが機能するには、 img1.height が機能する必要があります。

于 2012-09-27T19:21:42.523 に答える
-2

上記の css は表示されませんでしたが、問題はおそらく transform-origin プロパティです

詳細を読むためのリンク: http://www.w3schools.com/cssref/css3_pr_transform-origin.asp

div
{
transform: rotate(45deg);
transform-origin:20% 40%;
-ms-transform: rotate(45deg); /* IE 9 */
-ms-transform-origin:20% 40%; /* IE 9 */
-webkit-transform: rotate(45deg); /* Safari and Chrome */
-webkit-transform-origin:20% 40%; /* Safari and Chrome */
-moz-transform: rotate(45deg); /* Firefox */
-moz-transform-origin:20% 40%; /* Firefox */
-o-transform: rotate(45deg); /* Opera */
-o-transform-origin:20% 40%; /* Opera */
}
于 2012-09-27T17:50:19.213 に答える