Pixi.js: 마우슀 이동 μ‹œ μŠ€ν”„λΌμ΄νŠΈ 액컀 μœ„μΉ˜μ—μ„œ λ§ˆμš°μŠ€μ— μŠ€ν”„λΌμ΄νŠΈ μŠ€λƒ…

에 λ§Œλ“  2013λ…„ 06μ›” 23일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: pixijs/pixi.js

  1. λ“œλž˜κ·Έ(mousemove)ν•  λ•Œ λ§ˆμš°μŠ€κ°€ μžˆλŠ” μŠ€ν”„λΌμ΄νŠΈμ˜ μœ„μΉ˜μ— 관계없이 μŠ€ν”„λΌμ΄νŠΈλŠ” 마우슀 포인터가 이제 μŠ€ν”„λΌμ΄νŠΈμ˜ 액컀 μœ„μΉ˜μ— μžˆλ„λ‘ μœ„μΉ˜λ₯Ό λ³€κ²½ν•©λ‹ˆλ‹€.
  2. 더 큰 μŠ€ν”„λΌμ΄νŠΈμ˜ 경우 이 이동이 μƒλ‹Ήνžˆ κ±°μŠ¬λ¦½λ‹ˆλ‹€.
  3. 마우슀 포인터가 액컀 μœ„μΉ˜μ— μžˆμ„ ν•„μš”κ°€ μ—†λŠ” 것이 μ’‹μŠ΅λ‹ˆλ‹€. λ‚΄λΆ€μ μœΌλ‘œλŠ” μŠ€ν”„λΌμ΄νŠΈμ˜ 마우슀 μœ„μΉ˜μ™€ 상관없이 계산 등을 μœ„ν•΄ 액컀 μœ„μΉ˜λ₯Ό μœ μ§€ν•΄μ•Ό ν•©λ‹ˆλ‹€.
  4. μƒ˜ν”Œ μ½”λ“œμ™€ 이미지가 μ²¨λΆ€λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€. μž¬μƒμ‚°μ— λŒ€ν•œ μ°Έκ³  사항:

    • pixi.js의 λ“œλž˜κ·Έ μ˜ˆμ œμ—μ„œ μ‘°μ • 및 λ‹¨μˆœν™”λœ μ½”λ“œ(예제 8).

    • 이미지λ₯Ό λ‹€μš΄λ‘œλ“œν•˜κ³  μ½”λ“œμ— 참쑰된 λŒ€λ‘œ "aboriginal-bunny.png"둜 이름을 λ°”κΏ‰λ‹ˆλ‹€.

    • 토끼 액컀 ν¬μΈνŠΈλŠ” 0.1, 0.1둜 μ„€μ •λ©λ‹ˆλ‹€.

    • 기본적으둜 액컀 ν¬μΈνŠΈμ—μ„œ 멀리 떨어진 곳에 마우슀 μ»€μ„œλ₯Ό μŠ€ν”„λΌμ΄νŠΈ ν•˜λ‹¨μ— κ°€κΉŒμš΄ μœ„μΉ˜μ— λ†“μŠ΅λ‹ˆλ‹€.

    • 마우슀 λ‹€μš΄ μ‹œ μŠ€ν”„λΌμ΄νŠΈμ˜ μ•ŒνŒŒκ°€ λ³€κ²½λ˜μ§€λ§Œ λ‹€λ₯Έ λͺ¨λ“  것은 λ™μΌν•˜λ―€λ‘œ 마우슀 λ‹€μš΄ μ‹œ λ¬Έμ œκ°€ λ‚˜νƒ€λ‚˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

    • λ‹€μŒμœΌλ‘œ λ“œλž˜κ·Έ -- 마우슀 λ²„νŠΌμ„ λˆ„λ₯Έ μƒνƒœμ—μ„œ 이동 μ‹œμž‘ -- μ•½κ°„λ§Œ

    • λ§ˆμš°μŠ€κ°€ 액컀 ν¬μΈνŠΈμ— μžˆλ„λ‘ μŠ€ν”„λΌμ΄νŠΈμ˜ κ°‘μž‘μŠ€λŸ¬μš΄ 이동에 μœ μ˜ν•˜μ‹­μ‹œμ˜€.

    • μ΄μ œλΆ€ν„°λŠ” 이 μ•΅μ»€μ—μ„œ 마우슀둜 λ“œλž˜κ·Έκ°€ μœ μ§€λ©λ‹ˆλ‹€.

<!DOCTYPE HTML>
<html>
<head>
    <!-- Shamelessly adapted from pixi.js Example 8 - Dragging -->
    <title>Sprite to Mouse Snapping issue</title>
    <script src="pixi.js"></script>
</head>
<body>
    <script>

    var stage = new PIXI.Stage(0x97c56e, true);
    var renderer = PIXI.autoDetectRenderer(window.innerWidth, window.innerHeight, null);

    // add the renderer view element to the DOM
    document.body.appendChild(renderer.view);
    renderer.view.style.position = "absolute";
    renderer.view.style.top = "0px";
    renderer.view.style.left = "0px";
    requestAnimFrame( animate );

    // create a texture from an image path
    var texture = PIXI.Texture.fromImage("aboriginal-bunny.png");

    createAboriginalBunny(100, 100);

    function createAboriginalBunny(x, y)
    {
        var bunny = new PIXI.Sprite(texture);
        bunny.setInteractive(true);

        // leaving anchor point at 10% to illustrate the problem clearer
        bunny.anchor.x = 0.1;
        bunny.anchor.y = 0.1;

        /*
         * Set-up dragging
         */     
        bunny.mousedown = bunny.touchstart = function(data)
        {
            this.data = data;
            this.alpha = 0.5;
            this.dragging = true;
        };

        bunny.mouseup = bunny.mouseupoutside = bunny.touchend = bunny.touchendoutside = function(data)
        {
            this.alpha = 1
            this.dragging = false;
            // set the interaction data to null
            this.data = null;
        };

        bunny.mousemove = bunny.touchmove = function(data)
        {
            if(this.dragging)
            {
                // need to get parent coords..
                var newPosition = this.data.getLocalPosition(this.parent);
                this.position.x = newPosition.x;
                this.position.y = newPosition.y;
            }
        }

        // move the sprite to initial pos
        bunny.position.x = x;
        bunny.position.y = y;

        stage.addChild(bunny);
    }

    function animate() {
        requestAnimFrame( animate );
        renderer.render(stage);
    }

    </script>

    </body>
</html>

aboriginal-bunny

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

λ¨Όμ € μžμ„Έν•œ 버그 λ¦¬ν¬νŠΈμ™€ μƒ˜ν”Œ μ½”λ“œμ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λ§Žμ€ 정보λ₯Ό 얻을 λ•Œ λ§Žμ€ 도움이 λ©λ‹ˆλ‹€!

λΆˆν–‰νžˆλ„ 이것은 버그가 μ•„λ‹™λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” 마우슀λ₯Ό 움직일 λ•Œλ§ˆλ‹€ μŠ€ν”„λΌμ΄νŠΈμ˜ μœ„μΉ˜λ₯Ό β€‹β€‹λ§ˆμš°μŠ€μ˜ μœ„μΉ˜λ‘œ μ„€μ •ν•˜κΈ° λ•Œλ¬Έμ— λ°œμƒν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ λ°œμƒν•΄μ•Ό ν•˜λŠ” 일은 마우슀 μ›€μ§μž„μ˜ 델타 둜 μŠ€ν”„λΌμ΄νŠΈλ₯Ό μ—…λ°μ΄νŠΈν•΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ‹€μŒκ³Ό 같이 μ‹œλ„ν•˜μ‹­μ‹œμ˜€.

        /*
         * Set-up dragging
         */     
        bunny.mousedown = bunny.touchstart = function(data)
        {
            this.data = data;
            this.alpha = 0.5;
            this.dragging = this.data.getLocalPosition(this.parent);;
        };

        bunny.mouseup = bunny.mouseupoutside = bunny.touchend = bunny.touchendoutside = function(data)
        {
            this.alpha = 1
            this.dragging = false;
            // set the interaction data to null
            this.data = null;
        };

        bunny.mousemove = bunny.touchmove = function(data)
        {
            if(this.dragging)
            {
                // need to get parent coords..
                var newPosition = this.data.getLocalPosition(this.parent);
                this.position.x += (newPosition.x - this.dragging.x);
                this.position.y += (newPosition.y - this.dragging.y);
                this.dragging = newPosition;
            }
        }

μ€‘μš”ν•œ λΉ„νŠΈλŠ” mousedown 에 μžˆμŠ΅λ‹ˆλ‹€. 마우슀의 μœ„μΉ˜λ₯Ό ​​저μž₯ν•œ λ‹€μŒ mousemove 에 λ§ˆμš°μŠ€κ°€ _이동_ν•œ μ–‘λ§ŒνΌ(μƒˆ μœ„μΉ˜λ‘œ μ„€μ •ν•˜μ§€ μ•ŠμŒ) μŠ€ν”„λΌμ΄νŠΈ μœ„μΉ˜λ₯Ό μ—…λ°μ΄νŠΈν•œ λ‹€μŒ λ‹€μŒ λ²ˆμ„ μœ„ν•΄ μ €μž₯된 마우슀 μœ„μΉ˜λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. 이게 도움이 되길 λ°”λž€λ‹€!

λͺ¨λ“  5 λŒ“κΈ€

λ¨Όμ € μžμ„Έν•œ 버그 λ¦¬ν¬νŠΈμ™€ μƒ˜ν”Œ μ½”λ“œμ— κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. λ§Žμ€ 정보λ₯Ό 얻을 λ•Œ λ§Žμ€ 도움이 λ©λ‹ˆλ‹€!

λΆˆν–‰νžˆλ„ 이것은 버그가 μ•„λ‹™λ‹ˆλ‹€. 이 λ¬Έμ œλŠ” 마우슀λ₯Ό 움직일 λ•Œλ§ˆλ‹€ μŠ€ν”„λΌμ΄νŠΈμ˜ μœ„μΉ˜λ₯Ό β€‹β€‹λ§ˆμš°μŠ€μ˜ μœ„μΉ˜λ‘œ μ„€μ •ν•˜κΈ° λ•Œλ¬Έμ— λ°œμƒν•©λ‹ˆλ‹€. μ‹€μ œλ‘œ λ°œμƒν•΄μ•Ό ν•˜λŠ” 일은 마우슀 μ›€μ§μž„μ˜ 델타 둜 μŠ€ν”„λΌμ΄νŠΈλ₯Ό μ—…λ°μ΄νŠΈν•΄μ•Ό ν•œλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. λ‹€μŒκ³Ό 같이 μ‹œλ„ν•˜μ‹­μ‹œμ˜€.

        /*
         * Set-up dragging
         */     
        bunny.mousedown = bunny.touchstart = function(data)
        {
            this.data = data;
            this.alpha = 0.5;
            this.dragging = this.data.getLocalPosition(this.parent);;
        };

        bunny.mouseup = bunny.mouseupoutside = bunny.touchend = bunny.touchendoutside = function(data)
        {
            this.alpha = 1
            this.dragging = false;
            // set the interaction data to null
            this.data = null;
        };

        bunny.mousemove = bunny.touchmove = function(data)
        {
            if(this.dragging)
            {
                // need to get parent coords..
                var newPosition = this.data.getLocalPosition(this.parent);
                this.position.x += (newPosition.x - this.dragging.x);
                this.position.y += (newPosition.y - this.dragging.y);
                this.dragging = newPosition;
            }
        }

μ€‘μš”ν•œ λΉ„νŠΈλŠ” mousedown 에 μžˆμŠ΅λ‹ˆλ‹€. 마우슀의 μœ„μΉ˜λ₯Ό ​​저μž₯ν•œ λ‹€μŒ mousemove 에 λ§ˆμš°μŠ€κ°€ _이동_ν•œ μ–‘λ§ŒνΌ(μƒˆ μœ„μΉ˜λ‘œ μ„€μ •ν•˜μ§€ μ•ŠμŒ) μŠ€ν”„λΌμ΄νŠΈ μœ„μΉ˜λ₯Ό μ—…λ°μ΄νŠΈν•œ λ‹€μŒ λ‹€μŒ λ²ˆμ„ μœ„ν•΄ μ €μž₯된 마우슀 μœ„μΉ˜λ₯Ό μ—…λ°μ΄νŠΈν•©λ‹ˆλ‹€. 이게 도움이 되길 λ°”λž€λ‹€!

μ•ˆλ…•ν•˜μ„Έμš”,

이것은 λ‚΄ 문제λ₯Ό ν•΄κ²°ν•˜κ³  훨씬 더 λͺ…ν™•ν•˜κ²Œ 이해할 수 μžˆμŠ΅λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€. 그리고 예, 제 μ½”λ“œλŠ” 예제의 μž‘λ™ 방식을 기반으둜 ν•˜λ―€λ‘œ 예제λ₯Ό μ—…λ°μ΄νŠΈν•  수 μžˆλ‹€λ©΄ 쒋을 κ²ƒμž…λ‹ˆλ‹€. μž‘λ™ 방식을 μ΄ν•΄ν•˜λŠ” 데 어렀움을 κ²ͺμ—ˆλ˜ 기얡이 λ‚©λ‹ˆλ‹€. μ™„μ „νžˆ μž‘λ™ν•˜μ§€ μ•Šμ€ 것 κ°™μŠ΅λ‹ˆλ‹€. :ν”Ό

κ΄€λ ¨ μ§ˆλ¬Έμž…λ‹ˆλ‹€. 마우슀λ₯Ό 올릴 λ•Œ μƒν˜Έ μž‘μš© 데이터λ₯Ό null둜 μ„€μ •ν•΄μ•Ό ν•©λ‹ˆκΉŒ?

λ˜ν•œ getLocalPosition이 μ–Έμ œ ν•„μš”ν•œμ§€, ν˜„μž¬ μœ„μΉ˜λ§Œ ν•„μš”ν•œμ§€ 아직 ν™•μ‹€ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

μΆ”μ‹ . κ±±μ •ν•˜μ§€ λ§ˆμ‹­μ‹œμ˜€. 버그 λ³΄κ³ μ„œ μ„ΈλΆ€ 정보, μ΅œμ†Œν•œ λ‚΄κ°€ ν•  수 μžˆμŠ΅λ‹ˆλ‹€. λ„μ„œκ΄€μ„ μ œκ³΅ν•΄μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. :)

getLocalPosition 의 μ΄μœ λŠ” 마우슀 이벀트의 μ ˆλŒ€ μ’Œν‘œλ₯Ό DisplayObjectsκ°€ μ‚¬μš©ν•˜λŠ” 둜컬 μƒλŒ€ μ’Œν‘œλ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•¨μž…λ‹ˆλ‹€. 각 DisplayObject의 μœ„μΉ˜λŠ” λΆ€λͺ¨μ— μƒλŒ€μ μ΄λ―€λ‘œ μ ˆλŒ€ 마우슀 μ’Œν‘œλ₯Ό 가져와 this.data.getLocalPosition(this.parent) λ₯Ό μ‚¬μš©ν•˜μ—¬ λΆ€λͺ¨μ— μƒλŒ€μ μœΌλ‘œ λ³€ν™˜ν•©λ‹ˆλ‹€.

λ§ˆμš°μŠ€μ—… μ‹œ this.data = null λ₯Ό νŠΉλ³„νžˆ μ„€μ •ν•  ν•„μš”λŠ” μ—†μŠ΅λ‹ˆλ‹€. μ‹€μ œλ‘œ 각 ν•¨μˆ˜μ— data λ§€κ°œλ³€μˆ˜λ₯Ό μ‚¬μš©ν•  수 μžˆμ–΄μ•Ό ν•˜λ©° this.data λŠ” μ „ν˜€ μ‚¬μš©ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆλ‹€.

도움을 μ£Όμ…”μ„œ λ‹€μ‹œ ν•œ 번 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€. κ·Έλž˜ν”½ λΌμ΄λΈŒλŸ¬λ¦¬μ— 맀우 μƒˆλ‘œμš΄ κΈ°λŠ₯μ΄λ―€λ‘œ λ‹€μ–‘ν•œ κ΅¬ν˜„ 선택 사항을 이해해야 ν•©λ‹ˆλ‹€. μ‹œκ°„μ„ λ‚΄μ–΄ 제 μ§ˆλ¬Έμ— μ μ‹œμ— λ‹΅λ³€ν•΄ μ£Όμ‹  pixi κ°œλ°œμžμ—κ²Œ κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

이 μŠ€λ ˆλ“œλŠ” λ‹«νžŒ ν›„ 졜근 ν™œλ™μ΄ μ—†μ—ˆκΈ° λ•Œλ¬Έμ— μžλ™μœΌλ‘œ μž κ²ΌμŠ΅λ‹ˆλ‹€. κ΄€λ ¨ 버그에 λŒ€ν•œ μƒˆ 문제λ₯Ό μ—¬μ‹­μ‹œμ˜€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰