๋ฐ๋ผ๊ฑด๋์ด ๋ ๊ฐ์ง๋ ์ค์ ๋ก ๊ฐ์ ๋ฌธ์ ์ ๋ง์๋งํผ ์ถฉ๋ถํ ๊ฐ๊น์ต๋๋ค. ๋๋ pixi v3๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค
a.) ๋ ๊ฐ์ ๊ฒน์น๋ ์คํ๋ผ์ดํธ๊ฐ์์ ๋๋ง๋ค ์๋จ ์คํ๋ผ์ดํธ๊ฐ interactive = false ์ธ ๊ฒฝ์ฐ์๋ ํ๋จ ์คํ๋ผ์ดํธ (interactive = true)์ ๋ง์ฐ์ค ์ค๋ฒ๊ฐ ๋ฌธ์ ์ ์ฒซ ๋ฒ์งธ ์คํ๋ผ์ดํธ์ ์ํด ์ฐจ๋จ๋ฉ๋๋ค.
b.) ๊ฒ์์ HUD์ ์ฌ์ฉํ๋ ์ผ๋ถ DOM ์์์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ ค๋ ๊ทธ ์๋์์๋ ์คํ๋ผ์ดํธ๋ ๋ง์น ๋ง์ฐ์ค๋ฅผ ์ง์ ์ฌ๋ ค ๋์ ๊ฒ์ฒ๋ผ ์๋ํฉ๋๋ค. ์ด๊ฒ์ v2์์ ๋ฐ์ํ์ง ์์์ต๋๋ค. ์ด๊ฒ์ ๋ง์ฐ์ค ์ค๋ฒ๋ก ๋ฐ์ํ์ง๋ง ํด๋ฆญํ์ง ์์ต๋๋ค.
๋๋ ์ด๊ฒ๋ค์ ์ํด jsfiddle์ ๋ง๋ค๋ ค๊ณ ์๋ ํ ์ ์๋๋ก v3์ ๋ํ cdn ๋งํฌ๋ฅผ ์ฐพ๊ณ ์์์ง๋ง ๋ง์ ์ด์ด ์์์ต๋๋ค.
๊ฝค ๋ฉ์ง๋ค. dev
bin ํ์ผ ๋งํฌ๋ฅผ ์ฌ๊ธฐ์ ๋ถ์ฌ ๋ฃ์ผ๋ฉด ํ๋ก์๊ฐ GitHub์์ ์ง์ ๋ก๋ํ๋ URL์ด ์ ๊ณต๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด ๋ค์์ ๋ถ์ฌ ๋ฃ์ ์ ์์ต๋๋ค.
https://github.com/GoodBoyDigital/pixi.js/blob/dev/bin/pixi.js
๊ทธ๋ฆฌ๊ณ ๋๊ฐ์ญ์์ค :
๊ฐ์ฌํฉ๋๋ค. ์ค๋ jsfiddle ์์ ๋ฅผ ๋ง๋ค์ด ์ฌ๊ธฐ์ ๊ฒ์ํ๊ฒ ์ต๋๋ค.
๋ด ์์ ์ ์ค๋ช ํ๊ธฐ ์ํด ์ด๋ฏธ์ง๋ฅผ ์ฌ์ฉํด์ผํ๋ค๊ณ ์๊ฐํ๊ธฐ ๋๋ฌธ์ jsfiddle์ ์ฌ๋ฐ๋ฅด๊ฒ ์ค์ ํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ง๋ง, ๋ฌด์จ ์ผ์ด ์ผ์ด๋๊ณ ์๋์ง ํ์ ํ๊ธฐ ์ํด ๋ด๊ฐ ๋ง๋ ์ฝ๋์ ๊ด์ฐฐ ์ฌํญ์ ์ ๊ณต ํ ์ ์๊ธฐ๋ฅผ ๋ฐ๋๋๋ค. .
์ด๋ก ์ ๋ฒ๊ทธ ์ฌ๋ก (์์ฌ ์ฝ๋ ์ค ๋ํซ) :
var bunny = PIXI.Sprite.fromFrame(building.image);
bunny.interactive = true;
stage.addChild(bunny);
bunny.hitArea = poly;
bunny.on('mouseover',function(data){
bunny.brighten
});
bunny.on('mouseout',function(data){
bunny.unbrighten
});
var g2 = new PIXI.Graphics();
g2.beginFill(0xC03302);
g2.drawCircle(0, 0, 100);
g2.endFill();
var cant_touch_this = new PIXI.Sprite(g2.generateTexture());
cant_touch_this.position.x = bunny.position.x - 100;
cant_touch_this.position.y = bunny.sprite.position.y - 100;
stage.addChild(cant_touch_this);
๋ ์คํ๋ผ์ดํธ๊ฐ ๊ฒน์น๋ฉด ํ ๋ผ์ ํธ๋ค๋ฌ๊ฐ ๋ ๋ฒ์งธ ์คํ๋ผ์ดํธ์์ ํ ๋ฒ ์๋์ ๋ฉ ์ถฅ๋ ๋ค.
jsfiddle (http://jsfiddle.net/h63mLx7b/)์์ ๋น์ทํ ์์ ์ ์ํํ๋ฉด ๋ฒ๊ทธ๊ฐ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ด๊ฐ ๋ณด๋ ์ฃผ์ ์ฐจ์ด์ ์ค ํ๋๋ ๋ฐ์ด์ฌ๋ฆฐ์์ fromImage ๋๋ fromFrame์ ์ฌ์ฉํ์ง ์๊ณ ํ ์ค์ฒ๋ฅผ ์์ฑํ๋ค๋ ๊ฒ์ ๋๋ค. ๋๋ ๋ด ๊ฒ์์ ๋งฅ๋ฝ์์ ์ด๊ฒ์ ์๋ํ๊ณ (2 ๊ฐ์ ํ ์ค์ฒ ์์ฑ ์ฌ์ฉ) ๋ฒ๊ทธ๊ฐ ์ฌ์ ํ ์กด์ฌํฉ๋๋ค.
๋ค์์ผ๋ก ๊ฐ๋ฅ์ฑ์ด ์๋ค๊ณ ์๊ฐํ๋ ๊ฒ์ hitArea์ด์ง๋ง jsfiddle์ hitArea๋ฅผ ์ถ๊ฐํ์ ๋ ๋ฒ๊ทธ๊ฐ ๋ค์ ์์ฑ๋์ง ์์์ต๋๋ค. ๋ด๊ฐ ๋์น ๋ค๋ฅธ ์ค์ํ ์ค ๋ํซ์ด ์๋์ง ํ์ธํ๊ธฐ ์ํด ๋ด ์ฝ๋๋ฅผ ๊ณ์ ์ ์ถํ ๊ฒ์ ๋๋ค.ํ์ง๋ง ์๋ง๋ ๋ด๊ฐ ๋์น ๊ฒ์ ๋ณผ ์ ์์๊น์? ๋ด๊ฐ ์ค์๋ก ํฌํจํ์ ์๋์๋ ์คํ๋ผ์ดํธ ์๋์ ์ด๋ฒคํธ๊ฐ ๋ฐ์ํ์ง ์๋๋กํ๋ ์๋ ๋ ๋์์ด PIXI์ ์์ต๋๊น?
์๋ง๋ ์ ์ฉํ ์ ๋ณด ์ผ ์๋ ์์ต๋๋ค.
bunny.pivot.x = 0.5;
bunny.pivot.y = 1;
bunny.anchor.x = 0.5;
bunny.anchor.y = 1;
๋ ๋ค๋ฅธ ์ ์ฉํ ์ ๋ณด : ๋ด ๊ฒ์์ ๋งฅ๋ฝ์์ jsfiddle ์ฝ๋๊ฐ ๋ฒ๊ทธ๋ฅผ ์ฌํํฉ๋๋ค! ๊ทธ๋์ ๋ง์ง๋ง ์ง๋ฌธ์ ์ด๋ค ๊ธ๋ก๋ฒ ์ต์ (๋๋ ์ปจํ ์ด๋ ์์ฒด์ ์ต์ )์ด ์ด๊ฒ์ ๋ง๋ค ์ ์์ต๋๊น?
wahooooooo ๋๋ ๊ทธ๊ฒ์ ์์ ๋๋ค! ์ด๊ฒ์ด ์ง์ ํ ๋ฒ๊ทธ์ด๊ณ ์๋ ๋ ๋์์ด ์๋๋ผ๊ณ ๊ฐ์ ํ๋ฉด ๊ทธ๊ฒ์ ๋น์ ๋ณด๋ค ๋์๊ฒ ์ฝ๊ฐ ๋ ์ข์ ์์ ์ผ ์ ์์ต๋๋ค.
http://jsfiddle.net/h63mLx7b/1/
Interactive = true ์ธ ์ปจํ ์ด๋์ Sprite๊ฐ ์กด์ฌํ๋ฉด ๋ฒ๊ทธ๊ฐ ๋ฐ์ํฉ๋๋ค. stage.interactive = false๋ก ์ค์ ํ๋ฉด ๋ฒ๊ทธ๊ฐ ์ฌ๋ผ์ง๋๋ค.
ํธ์ง : ์ฒ์์ ์๋ชป๋ ๋ฐ์ด์ฌ๋ฆฐ ๋งํฌ
@englercj ํ. ์ด๊ฑธ ๋ณผ ๊ธฐํ๊ฐ ์๋์ง ๊ถ๊ธํด
์์ง ์ ํ์ด์ ๋ฏธ์ ์๋์ฐ.
์ ๋ ์ง๊ธ ๋ง์ ์ธ์ ์ด๋ฒคํธ๊ฐ ์งํ๋๊ณ ์์ผ๋ฉฐ ๋ถ์์ ์ธ ํ๋ก์ ํธ ์๊ฐ์ด ๋ง์ง ์์์ต๋๋ค. ๊ณง ๋ฒ๊ทธ ์ค๋งค์๋ฅผํ๊ณ ์ถ์ง๋ง ์ง๊ธ์ ๋งค์ฐ ๋ฐ์ฉ๋๋ค.
๊ฑฑ์ ํ์ง๋ง, ๋๋ ๊ทธ๊ฒ์ด ์ด๋ป๊ฒ๋๋์ง ์ดํดํ๋ค. :)
์ฌ๊ธฐ์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค ... http://www.html5gamedevs.com/topic/14202-pixi-v3-interactive-sprite-below-a-tilingsprite-problem/
Hey peeps-dev ๋ธ๋์น๋ฅผ ์ฝ๊ฐ ์์ ํ์ต๋๋ค.
์ด์ ๊ด์ฐฎ์!
๊ฐ์ฌ :)
๋ด ์ชฝ์์๋ ์์ ์ ํ์ธํ์ต๋๋ค. ๋ฌด๋ฆฌ ๊ฐ์ฌ!
์ฌ์ค, ๋ด ์๋ ์ง๋ฌธ์ ๋ ๋ฒ์งธ ๋ถ๋ถ์ ์ฌ์ ํ โโ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ๊ณ ์์ต๋๋ค.
b.) ๊ฒ์์ HUD์ ์ฌ์ฉํ๋ ์ผ๋ถ DOM ์์ ์์ ๋ง์ฐ์ค๋ฅผ ๋์ ๋ ๊ทธ ์๋์ ์คํ๋ผ์ดํธ๋ ๋ง์น ์ง์ ๋ง์ฐ์ค๋ฅผ ์ฌ๋ฆฌ๊ฑฐ๋ ํด๋ฆญํ๋ ๊ฒ์ฒ๋ผ ์๋ํฉ๋๋ค. ์ด๊ฒ์ v2์์ ๋ฐ์ํ์ง ์์์ต๋๋ค. ์ด๊ฒ์ ๋ง์ฐ์ค ์ค๋ฒ๋ก ๋ฐ์ํ์ง๋ง ํด๋ฆญํ์ง ์์ต๋๋ค.
DOM HUD ์์ ์ค ํ๋๋ฅผ ํด๋ฆญํ๋ ค๊ณ ํ๋ฉด ์๋์ ์บ๋ฒ์ค๊ฐ ์ฌ์ ํ ํด๋ฆญ์ ํธ๋ฆฌ๊ฑฐํ๊ณ ๊ธฐ๋ณธ ์ปจํ ์ด๋ mouseup ํธ๋ค๋ฌ๊ฐ ๋ฐ์ํ์ฌ ๋ฉ๋ด๋ฅผ ์์ฑ / ํ์ ํ ํ ์ฆ์ ์จ๊ฒจ ์ง๋ฏ๋ก ์ฝ๊ฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํฉ๋๋ค. jquery mouseup ์ฒ๋ฆฌ๊ธฐ์์ e.stopPropagation์ ์ฌ์ฉํ๋ ค๊ณ ์๋ํ์ง๋ง ์๋ฌด ์์ฉ์ด ์์ต๋๋ค.
stage.on('mouseup',function(data){
console.log("Still triggering");
});
$('body').on('mouseup','#battle-menu:not(.attack-island)',function(e){
e.stopPropagation();
});
๋ค์ ์ด์ด์ ์ฃ์กํฉ๋๋ค. ์๋ ๊ฒ์๋ฌผ์ ๋ค์ ์ฝ์์ด์ผํฉ๋๋ค.
http://jsfiddle.net/prg9jubt/2/
๋๋ก๋ ์คํ ์ด์ง ํด๋ฆญ์ด ๋ค๋ฅธ ์๊ฐ์ ํธ๋ฆฌ๊ฑฐ๋๊ธฐ ๋๋ฌธ์ ์ด์ํฉ๋๋ค. ์ฐธ์กฐ ์ฃผ์๋ฅผ ํด๋ฆญํ์ญ์์ค
๋์์ด๋๋ค๋ฉด ์ด๋ฐ ์ข ๋ฅ์ ๋์์ mouseup์์๋ง ๋ฐ์ํ๋ ๊ฒ ๊ฐ์ต๋๋ค. Mousedown๊ณผ ํด๋ฆญ์ด ๊ฒฌ๊ณ ํด ๋ณด์ ๋๋ค.
# 1765์ ๋ํด 5344062ef4657857ce6a20bea4681e5d66c1c2b2์์ ๋๋ ๋ ธ์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฌํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์์ต๋๋ค.
@englercj ๊ทธ๋์ ๋ด๊ฐ ๋ฐ๋ผ๊ฐ ์ ์๋๋ก ๋ด๊ฐ ์ธ๊ธ ํ ๊ฒน์น๋ ์คํ๋ผ์ดํธ ๋ฒ๊ทธ๊ฐ pixi์ ๋ง์คํฐ ๋ธ๋์น์ ๋ค์ ์กด์ฌํ๋ ๋์ ๋ ๋์ ๋ฐฉ๋ฒ์ ์ฐพ๊ณ ์์ต๋๊น?
๋ด๊ฐ ์ด๋์ ์ ์๋์ง ํ์ธํ๊ณ ์ถ์ด์ / ์ง๊ธ์ ๋ค๋ฅธ ์ผ์ํ๊ธฐ ์ํด ์ฌ๊ธฐ๋ก ๋์ด๊ฐ ์ ์๋ค๋ฉด
๋ค, ๋ง์ต๋๋ค.
์ข์, @englercj ์ ๋ฐ์ดํธ ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค
๊ฒฐ์ ๋! : +1 :
์ด๋ค ์๋๋ฆฌ์ค๊ฐ ์์ ๋์์ต๋๊น? ๋ด ์ปจํ ์ด๋์ interactive = true์ด๊ณ ํํฐํด ์ด๋ฏธ ํฐ๊ฐ ๋ํ ํ ์คํ๋ผ์ดํธ์๋ณด๊ธฐ๋ฅผ ์ฐจ๋จํ๋ ๊ฒฝ์ฐ ํด๋น ์คํ๋ผ์ดํธ์ ๋ํ ๋ง์ฐ์ค ์ด๋ฒคํธ๊ฐ ์ฌ์ ํ ๋ฐ์ํ์ง ์์ต๋๋ค. ๋ถ๋ช ํ ์ปจํ ์ด๋์ interactive = false๋ฅผ ์ค์ ํ๋ฉด ์ด๋ฒคํธ๊ฐ ๋ฐ์ํฉ๋๋ค. ๊ทธ๋ฌ๋์ง๋๋ฅผ ๋์ด์ ํ๋ / ์ถ์ ํ ์ ์๋๋ก ์ปจํ ์ด๋๊ฐ ๋ํ ํ์ด์ด์ผํฉ๋๋ค. ์ฝ๋์ ์ต์ ๊ฐ๋ฐ ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
ํธ๋ฆญ์ ๋น hitArea๋ฅผ DisplayObject ๋๋ DisplayObjectContainer์ ์ค์ ํ๋ ๊ฒ์
๋๋ค.
mouseDisabledElement.hitArea = new PIXI.Rectangle (0, 0, 0, 0);
์ด ์ค๋ ๋๋ ๋ซํ ํ ์ต๊ทผ ํ๋์ด ์์๊ธฐ ๋๋ฌธ์ ์๋์ผ๋ก ์ ๊ฒผ์ต๋๋ค. ๊ด๋ จ ๋ฒ๊ทธ์ ๋ํ ์ ๋ฌธ์ ๋ฅผ์ฌ์ญ์์ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
ํธ๋ฆญ์ ๋น hitArea๋ฅผ DisplayObject ๋๋ DisplayObjectContainer์ ์ค์ ํ๋ ๊ฒ์ ๋๋ค.
mouseDisabledElement.hitArea = new PIXI.Rectangle (0, 0, 0, 0);