1

KineticJSを使用して、円と4つの長方形だけを持つグループを作成しようとしましたが、クリックすると、長方形が周囲に表示され(オプションの場合)、次のクリックで非表示になります。それらはうまく作成されており(私は思う?)、長方形だけを選択したところまで到達できますが、メインの円をクリックして状態を確認するときに、RectオブジェクトのsetVisible()関数を使用する必要があります。

        function makePlayer(xPos, yPos) {
            var bufferSize = 15;
            var player = new Kinetic.Group();
            var ball = new Kinetic.Circle({
                x: xPos,
                y: yPos,
                radius: 40,
                fill: 'black',
                stroke: 'black',
                strokeWidth: 1
            });
            player.add(ball);
            ball.setAttr("menuShow", false);


            for (var i = 0; i < 4; i++) {
                var menuBox = new Kinetic.Rect({
                    x: ball.getX(),
                    y: ball.getY(),
                    width: 50,
                    height: 50,
                    visible: false
                });
                if (i == 0) {
                    menuBox.setFill('red');
                    menuBox.setOffset(menuBox.getWidth() / 2, ball.getHeight() + bufferSize);
                    menuBox.on("click tap", function () { alert("red box clicked/tapped") });
                } else if (i == 1) {
                    menuBox.setFill('blue');
                    menuBox.setOffset(((ball.getWidth() / 2) * -1) - bufferSize, menuBox.getHeight() / 2);
                    menuBox.on("click tap", function () { alert("blue box clicked/tapped") });
                } else if (i == 2) {
                    menuBox.setFill('yellow');
                    menuBox.setOffset(menuBox.getWidth() / 2, ((ball.getHeight() / 2) * -1) - bufferSize);
                    menuBox.on("click tap", function () { alert("yellow box clicked/tapped") });
                } else if (i == 3) {
                    menuBox.setFill('white');
                    menuBox.setOffset(ball.getWidth() + bufferSize, menuBox.getHeight() / 2);
                    menuBox.on("click tap", function () { alert("white box clicked/tapped") });
                }
                menuBox.setAttr("menu", true);
                player.add(menuBox);
            }
            ball.on("click tap", function () {
                var menuPopup = ball.getAttrs();
                if (menuPopup.menuShow == false) {
                    for (var i = 1; i <= 4; i++) {
                        var menuBox = player.get('Rect');
                        menuBox.setVisible(true);
                    }
                }
            });

円は通常どおりに生成されますが、クリックされるたびに、前述のように、コードがsetVisibleでクラップスされます。

これは私が得るjavascriptエラーです:Uncaught TypeError:Object [object Object]、[object Object]、[object Object]、[objectObject]にはメソッド'setVisible'がありません

4

1 に答える 1

1

kinectjs はわかりませんが、メニューを追加して表示する方法と関係があるのではないかと考えなければなりません。特定のメニューを識別するためにループ変数を使用しません。たとえば、menuBox を配列に作成するか、名前を数値と連結して作成するようです。次に、クリック/タップ ハンドラー ループで、おそらく個々のメニューを同じ方法で参照する必要があります。

もう一度見てみると、player.get('Rect') 行が一致する項目の配列を返しているようです。したがって、問題の実際の解決策は、最初の段落を無視し、代わりにタップ ハンドラーのループ行を次のように変更することだと思います。

menuBox[i-1].setVisible(true);
于 2012-11-07T02:55:30.740 に答える