
åããŠã®ãã£ã¢ããããšã€ãžãªããšã³ãã€ã¢ãã³ãã³ããªã©ãç§ãã¡ã¯ççŽ æŽããã
ã¢ã€ãœã¡ããªãã¯ã²ãŒã ããã¬ã€ããŸããã çå°ºæ§ã²ãŒã ãšã®æåã®äŒè°ã§ã
2次å
ã
3次å
ããŸãã¯ãŸã£ããç°ãªãäœããå°ããããšãã§ããŸãã ã¢ã€ãœã¡ããªãã¯ã²ãŒã ã®äžçèªäœã¯ãéçºè
ã«ãšã£ãŠé
åçãªé
åããããŸãã çè§æåœ±ã®ç§å¯ãæããã«ããç°¡åãªçå°ºæ§ã¬ãã«ãäœæããŠã¿ãŸãããã
ãã®ãããJSã³ãŒãã§
Phaserã䜿çšããããšã«ããŸããã çµæã¯ãã€ã³ã¿ã©ã¯ãã£ããªHTML5ã¢ããªã±ãŒã·ã§ã³ã§ãã
ããã¯Phaseréçºã®ãã¥ãŒããªã¢ã«ã§ã¯ãªãããšã«æ³šæããŠãã ãããã¢ã€ãœã¡ããªãã¯ã·ãŒã³ãäœæããããã®åºæ¬çãªæŠå¿µãç°¡åã«çè§£ããããã«äœ¿çšããŸãã Phaserã«ã¯ã
Phaser Isometric Pluginãªã©ã®çå°ºæ§ã³ã³ãã³ããç°¡åã«äœæããæ¹æ³ããããŸãã
ã·ãŒã³ã®äœæãç°¡çŽ åããããã«ãã¿ã€ã«ã䜿çšããŸãã
1.ã¿ã€ã«ããŒã¹ã®ã²ãŒã
2次å
ã¿ã€ã«ã²ãŒã ã§ã¯ãåèŠèŠèŠçŽ ã¯ã¿ã€ã«ãšåŒã°ããæšæºãµã€ãºã®å°ããªæçã«åå²ãããŸãã ãããã®ã¿ã€ã«ã®ãã¡ãã¬ãã«ããŒã¿ïŒéåžžã¯2次å
é
åïŒã«åºã¥ããŠãã²ãŒã ã¯ãŒã«ãã圢æãããŸãã
ã»ãšãã©ã®å Žåãã¿ã€ã«ã²ãŒã ã§ã¯ã
ããã ãã¥ãŒãŸãã¯
ãµã€ããã¥ãŒã䜿çšãããŸãã å³ã«ç€ºãããã«ã2ã€ã®ã¿ã€ã«ïŒ
è ã¿ã€ã«ãš
å£ã¿ã€ã« ïŒãåããæšæºã®2次å
ã®äžé¢å³ãæ³åããŠã¿ãŸãããã

ãããã®ã¿ã€ã«ã¯äž¡æ¹ãšãåããµã€ãºã®æ£æ¹åœ¢ã®ç»åã§ããã€ãŸã
ãã¿ã€ã«ã®
é«ããš
å¹
ã¯åãã§ãã ã²ãŒã ã®ã¬ãã«ã¯ããã¹ãŠã®åŽé¢ãå£ã§å²ãŸããèçã§ãããšæ³å®ããŸãã ãã®å Žåãã¬ãã«ããŒã¿ã¯æ¬¡ã®ãããª2次å
é
åã§ãã
[ [1,1,1,1,1,1], [1,0,0,0,0,1], [1,0,0,0,0,1], [1,0,0,0,0,1], [1,0,0,0,0,1], [1,1,1,1,1,1] ]
ããã§ã
0
ã¯èã®ã¿ã€ã«ã
1
ã¯å£ã®ã¿ã€ã«ã§ãã ã¬ãã«ããŒã¿ã«åŸã£ãŠã¿ã€ã«ãé
眮ããããå³ã«ç€ºãããã«ãã§ã³ã¹ä»ãã®èçãäœæããŸãã

å¥ã®æé ãå®è¡ããŠãã³ãŒããŒã¿ã€ã«ãšãåçŽå£ãšæ°Žå¹³å£ã®åå¥ã®ã¿ã€ã«ã远å ã§ããŸãã ããã«ã¯ãããã«5ã€ã®ã¿ã€ã«ãå¿
èŠã§ããããã«ãã¬ãã«ããŒã¿ã倿Žããå¿
èŠããããŸãã
[ [3,1,1,1,1,4], [2,0,0,0,0,2], [2,0,0,0,0,2], [2,0,0,0,0,2], [2,0,0,0,0,2], [6,1,1,1,1,5] ]
以äžã®ç»åãåç
§ããŠãã ãããã¬ãã«ããŒã¿ã®å€ã«å¯Ÿå¿ããçªå·ã§ã¿ã€ã«ãããŒã¯ããŸããã

ã¿ã€ã«ã¬ãã«ã®æŠå¿µãçè§£ããã®ã§ã2次å
ã°ãªããã®åçŽãªæ¬äŒŒã³ãŒãã䜿çšããŠã¬ãã«ãæ§ç¯ããæ¹æ³ãèŠãŠã¿ãŸãããã
for (i, loop through rows) for (j, loop through columns) x = j * tile width y = i * tile height tileType = levelData[i][j] placetile(tileType, x, y)
äžèšã®å¹
ãšé«ããåãã¿ã€ã«ã®ç»åã䜿çšãããšãåãã¬ãã«ã®å¯žæ³ãåŸãããŸãã ãã®äŸã®ã¿ã€ã«ã®å¹
ãšé«ãã50ãã¯ã»ã«ã®å Žåãã¬ãã«ã®åèšãµã€ãºã¯300 x 300ãã¯ã»ã«ã«ãªããŸãã
åè¿°ã®ããã«ãéåžžãã¿ã€ã«ã¯äžé¢ãŸãã¯åŽé¢ãã¥ãŒã®ã²ãŒã ã§äœ¿çšãããŸãã çè§æåœ±ãã¥ãŒã®å Žå
ãçè§æåœ±ãå®è£
ããå¿
èŠããããŸãã
2.çè§å³
çè§æåœ±æ³ã®æè¯ã®æè¡ç説æã¯
ãClint Bellengerã«ãããã®
èšäºã§èª¬æãããŠããããã«
æããŸãã
ã«ã¡ã©ã2ã€ã®è»žã«æ²¿ã£ãŠåŸããŸãïŒã«ã¡ã©ã暪ã«45åºŠãæ¬¡ã«30床äžã«å転ãããŸãïŒã ããã«ãããã»ã«ã®å¹
ãé«ãã®2åã®è±åœ¢ã°ãªãããäœæãããŸãã ãã®ã¹ã¿ã€ã«ã¯ãæŠç¥ã²ãŒã ãšã¢ã¯ã·ã§ã³RPGã®ãããã§äººæ°ã«ãªããŸããã ãã®ãã©ãŒã ã®ãã¥ãŒããèŠããšããã®3ã€ã®åŽé¢ïŒäžåŽãš2ã€ã®åŽé¢ïŒãèŠããŸãã
ããã¯å°ãè€éã«èãããŸããããã®çš®ã®å®è£
ã¯éåžžã«ç°¡åã§ãã 2次å
空éãšçå°ºæ§ç©ºéãã©ã®ããã«é¢é£ããŠããããã€ãŸãã¬ãã«ããŒã¿ãšãã¥ãŒã®é¢ä¿ãçè§£ããå¿
èŠããããŸãã ããããã¥ãŒã®
ãã«ã«ã座æšãçè§åº§æšã«å€æããå¿
èŠããããŸãã 以äžã®å³ã¯ãã°ã©ãã£ãã¯å€æã瀺ããŠããŸãã

çå°ºæ§ã¿ã€ã«ã®é
眮
2次å
é
åã«ä¿åãããã¬ãã«ããŒã¿ãšçè§æåœ±ãã¥ãŒã®é¢ä¿ãã€ãŸããã«ã«ã座æšãçè§æåœ±ã«å€æããããã»ã¹ãåçŽåããŠã¿ãŸãããã ãã§ã³ã¹ã§å²ãŸããèçã®çè§å³ãäœæããŸãã ãã®ã¬ãã«ã®2次å
å®è£
ã¯ãå¹
ãšé«ãã§ãªãã»ãããããæ£æ¹åœ¢ã¿ã€ã«ã䜿çšãã2ãµã€ã¯ã«ã®åçŽãªå埩ã§ããã ã¢ã€ãœã¡ãã¥ãŒã®å Žåãæ¬äŒŒã³ãŒãã¯åããŸãŸã§ããã
placeTile()
颿°ã¯å€æŽãããŸãã
å
ã®é¢æ°ã¯ãæž¡ããã
x
ããã³
y
ã«ã¿ã€ã«ã®ç»åãæç»ããã ãã§ããã¢ã€ãœã¡ãã¥ãŒã®å Žåã察å¿ããã¢ã€ãœã¡åº§æšãèšç®ããå¿
èŠããããŸãã ãã®æ¹çšåŒã以äžã«ç€ºããŸãã
isoX
ããã³
isoY
ã¯çå°ºæ§ã®Xããã³Y座æšã§ããã
cartX
ããã³
cartY
ã¯ãã«ã«ãã®Xããã³Y座æšã§ãã
ã¯ããããã ãã§ãã ãããã®åçŽãªæ¹çšåŒã¯ãçè§æåœ±ã®éæ³ãäœæããŸãã éåžžã«äŸ¿å©ãª
Point
ã¯ã©ã¹ã䜿çšããŠãããã·ã¹ãã ããå¥ã®ã·ã¹ãã ã«å€æããããã«äœ¿çšã§ããPhaserã®ãã«ããŒé¢æ°ã次ã«ç€ºããŸãã
function cartesianToIsometric(cartPt){ var tempPt=new Phaser.Point(); tempPt.x=cartPt.x-cartPt.y; tempPt.y=(cartPt.x+cartPt.y)/2; return (tempPt); }
function isometricToCartesian(isoPt){ var tempPt=new Phaser.Point(); tempPt.x=(2*isoPt.y+isoPt.x)/2; tempPt.y=(2*isoPt.y-isoPt.x)/2; return (tempPt); }
ãããã£ãŠã
cartesianToIsometric
ãã«ããŒã¡ãœããã䜿çšããŠã
placeTile
ã¡ãœããå
ã§å
¥å2D座æšãã¢ã€ãœã¡ããªãã¯ã«å€æã§ããŸãã ãã以å€ã¯ã衚瀺ã³ãŒãã¯åããŸãŸã§ãããæ°ããã¿ã€ã«ç»åãäœæããå¿
èŠããããŸãã ããããã¥ãŒããå€ãæ£æ¹åœ¢ã®ã¿ã€ã«ã䜿çšããããšã¯ã§ããŸããã äžã®å³ã¯ãèãšå£ã®æ°ããçå°ºæ§ã¿ã€ã«ãšå®æããçå°ºæ§ã¬ãã«ã瀺ããŠããŸãã

ä¿¡ããããªãããïŒ éåžžã®2次å
äœçœ®ãã©ã®ããã«çå°ºæ§ã«å€æãããããèŠãŠã¿ãŸãããã
2D point = [100, 100];
ã€ãŸããå
¥åããŒã¿
[0, 0]
[0, 0]
ã«ã
[10, 5]
[5, 7.5]
倿ãããŸãã
ãã§ã³ã¹ã§å²ãŸããèçã®å Žåãç®çã®åº§æšã§é
åèŠçŽ ã®å€ã
0
ã«çãããã©ããã確èªããããšã§ãééå¯èœãªé åãæ±ºå®ã§ããŸãã çããå Žåãããã¯èã§ãã ãããè¡ãã«ã¯ãé
åã®åº§æšã決å®ããå¿
èŠããããŸãã ãã®é¢æ°ã䜿çšããŠããã«ã«ã座æšããã¬ãã«ããŒã¿ã§ã¿ã€ã«ã®åº§æšãèŠã€ããããšãã§ããŸãã
function getTileCoordinates(cartPt, tileHeight){ var tempPt=new Phaser.Point(); tempPt.x=Math.floor(cartPt.x/tileHeight); tempPt.y=Math.floor(cartPt.y/tileHeight); return(tempPt); }
ïŒããã§ã¯ãã»ãšãã©ã®å Žåãšåæ§ã«ãã¿ã€ã«ã®é«ããšå¹
ãåãã§ãããšæ³å®ããŠããŸããïŒ
ã€ãŸããäžå¯Ÿã®ç»é¢ïŒçå°ºæ§ïŒåº§æšãããã£ãŠããã®ã§ã颿°ãåŒã³åºãããšã§ã¿ã€ã«åº§æšãèŠã€ããããšãã§ããŸãã
getTileCoordinates(isometricToCartesian(screen point), tile height);
ç»é¢äžã®ãã®ãã€ã³ãã¯ãããšãã°ãããŠã¹ã«ãŒãœã«ãŸãã¯éžæããã¢ã€ãã ã®äœçœ®ã§ãã
ç»é²ãã€ã³ã
Flashã§ã¯ãä»»æã®ã°ã©ãã£ãã¯ãã€ã³ããããŒã¹ãã€ã³ããŸãã¯
[0,0]
ãšããŠéžæã§ããŸãã Phaserã®ãã®é¡äŒŒç©ã¯
Pivot
ã§ãã ããšãã°ããã€ã³ã
[10,20]
ã«ã°ã©ããé
眮ãããšããã®
Pivot
ãã€ã³ãã¯
[10,20]
察å¿ããŸãã ããã©ã«ãã§ã¯ã
[0,0]
ãŸãã¯
Pivot
ã¯å·Šäžã®ãã€ã³ããšèŠãªãããŸãã ãã®ã³ãŒãã䜿çšããŠäžèšã®ã¬ãã«ãäœæããããšãããšãç®çã®çµæãåŸãããŸããã 代ããã«ã以äžã«ç€ºãããã«ãå£ã®ãªãå¹³ããªå°é¢ã«ãªããŸãã

ããã¯ãã¿ã€ã«ç»åã®ãµã€ãºãç°ãªããããå£ã¿ã€ã«ã®é«ã屿§ãèæ
®ããŠããªãããã§ãã äžã®å³ã¯ãç§ãã¡ã䜿çšããã¿ã€ã«ã®ããŸããŸãªç»åãšãããã©ã«ãã§é
眮ãããŠããçœãå[0,0]ã瀺ããŠããŸãã

åºç¹ïŒããããïŒã䜿çšããå Žåãããã©ã«ãã§ã¯ããŒããŒã¯ééã£ãå Žæã«ããããšã«æ³šæããŠãã ããã ãŸããããã©ã«ãã®åºç¹ã䜿çšããŠå£ãæç»ãããšãå£ã®é«ãã倱ãããããšã«æ³šæããŠãã ããã å³ã®å³ã¯ãå£ã¿ã€ã«ã®é«ããèæ
®ããããŒããŒãèã®ã¿ã€ã«ã®çãäžã«ããããã«ãæ£ããé
眮ããæ¹æ³ã瀺ããŠããŸãã ãã®åé¡ã¯ããŸããŸãªæ¹æ³ã§è§£æ±ºã§ããŸãã
- ãã¹ãŠã®ã¿ã€ã«ã®ç»åãµã€ãºãåãã«ããã°ã©ãã£ãã¯ãç»åã«æ£ããé
眮ããŸãã åæã«ãå€ãã®ç©ºã®é åãåã¿ã€ã«ç»åã«äœæãããŸãã
- ã¿ã€ã«ãæ£ããé
眮ãããããã«ãåã¿ã€ã«ã®åºç¹ãæåã§èšå®ããŸãã
- ç¹å®ã®ãªãã»ããã§ã¿ã€ã«ãæããŸãã
ãã®ãã¥ãŒããªã¢ã«ã§ã¯ãããŒã¹ãã€ã³ãã倿Žã§ããªããã¬ãŒã ã¯ãŒã¯ã§ãæ©èœããããã3çªç®ã®æ¹æ³ãéžæããŸããã
3.çå°ºæ§åº§æšã®åã
çå°ºæ§åº§æšã®æåããªããžã§ã¯ããçŽæ¥ç§»åããªãã§ãã ããã 代ããã«ããã«ã«ã座æšã§ã²ãŒã ã¯ãŒã«ãã®ããŒã¿ã管çããäžèšã®é¢æ°ã䜿çšããŠç»é¢äžã®äœçœ®ãæŽæ°ããŸãã ããšãã°ããã£ã©ã¯ã¿ãŒãYè»žã«æ²¿ã£ãŠæ£ã®æ¹åã«åæ¹ã«ç§»åããå Žåã2次å
座æšã§
y
ããããã£ãåçŽã«å¢ãããæçµäœçœ®ãçè§åº§æšã«å€æã§ããŸãã
y = y + speed; placetile(cartesianToIsometric(new Phaser.Point(x, y)))
ç§ãã¡ãåŠãã ãã¹ãŠã®æ°ããæŠå¿µãèŠçŽããçå°ºæ§ã®äžçã§åããªããžã§ã¯ãã®å®äŸãå®è£
ããŠã¿ãŸãããã gitãœãŒã¹ã³ãŒã
ãªããžããªã® assets
ãã©ã«ããŒããå¿
èŠãªã°ã©ãã£ãã¯ãªãœãŒã¹ã䜿çšã§ã
ãŸã ã
æ·±ããœãŒã
ãã§ã³ã¹ã§å²ãŸããåºã§ããŒã«ã®ã€ã¡ãŒãžãç§»åããããšãããšã
æ·±ãã«ãããœãŒãã«åé¡ããããŸãã çå°ºæ§ã®äžçã«ç§»åããèŠçŽ ãããå Žåãéåžžã®å Žæã«å ããŠã
depthã«ããäžŠã¹æ¿ãã®äžè©±ãããå¿
èŠããããŸãã é©åãªäžŠã¹æ¿ãã«ãããç»é¢ã«è¿ããªããžã§ã¯ããããé ããªããžã§ã¯ãã®äžã«æç»ãããŸãã
ãã®èšäºã§èª¬æããããã«ãæãåçŽãªãœãŒãæ¹æ³ã¯ãã«ã«ãY座æšã䜿çšããããšã§ããç»é¢äžã®ãªããžã§ã¯ããé«ããã°é«ãã»ã©ãæ©ãæç»ãããã¯ãã§ãã ããã¯åçŽãªçå°ºæ§ã·ãŒã³ã§ã¯ããŸãæ©èœããŸãããé
åå
ã®ã¿ã€ã«ã®åº§æšã«åŸã£ãŠç§»åããããã»ã¹ã§çå°ºæ§ã·ãŒã³å
šäœãåæç»ããæ¹ãè¯ãã§ãããã ã¬ãã«ã¬ã³ããªã³ã°ã«æ¬äŒŒã³ãŒãã䜿çšããŠããã®ã¢ãããŒãã詳ãã説æããŸãã
for (i, loop through rows) for (j, loop through columns) x = j * tile width y = i * tile height tileType = levelData[i][j] placetile(tileType, x, y)
ãªããžã§ã¯ããŸãã¯ãã£ã©ã¯ã¿ãŒãã¿ã€ã«
[1,1]
ãã€ãŸãçè§å³ã®äžçªäžã®ç·ã®ã¿ã€ã«ã®äžã«ãããšæ³åããŠãã ããã ã¬ãã«ãæ£ããæç»ããã«ã¯ãå³ã«ç€ºãããã«ãã³ãŒããŒã®å£ã¿ã€ã«ãå·Šå³ã®å£ã¿ã€ã«ãå°é¢ãæç»ããåŸã«ãã£ã©ã¯ã¿ãŒãæç»ããå¿
èŠããããŸãã

æ¬äŒŒã³ãŒãã«åŸã£ãŠã¬ã³ããªã³ã°ãµã€ã¯ã«ãå®è¡ãããšãæåã«äžå€®ã®ã³ãŒããŒã®å£ãæç»ããããã®åŸãå³äžé
ã®ãã¹ãŠã®å£ãå³ã³ãŒããŒã«å°éãããŸã§ãµã€ã¯ã«ãæç»ããç¶ããŸãã æ¬¡ã®ãµã€ã¯ã«ã§ã圌ã¯ãã£ã©ã¯ã¿ãŒã®å·ŠåŽã«å£ãæããæ¬¡ã«ãã£ã©ã¯ã¿ãŒãç«ã€èã®ã¿ã€ã«ãæããŸãã ããããã£ã©ã¯ã¿ãŒãå ããã¿ã€ã«ã§ãããšå€æãããã
ãèçã¿ã€ã«ã®
åŸã«ãã£ã©ã¯ã¿ãŒãæç»ããŸãã ãããã£ãŠããã£ã©ã¯ã¿ãŒã®ã¿ã€ã«ã®é£ã«ããç¡æã®3ã€ã®èã®ã¿ã€ã«ã«å£ãããå Žåããããã®å£ã¯ãã£ã©ã¯ã¿ãŒãšéãªããæ·±ãã«ããé©åãªãœãŒããä¿èšŒããŸãã
4.ã°ã©ãã£ãã¯ã®äœæ
çå°ºæ§ã°ã©ãã£ãã¯ã¹ã¯ããã¯ã»ã«ã¢ãŒãã§ããå ŽåããããŸãããããã§ããå¿
èŠã¯ãããŸããã çå°ºæ§ãã¯ã»ã«ã¢ãŒãã䜿çšããå Žåãå¿
èŠãªãã®ããã¹ãŠå«ãŸããŠ
ããRhysDããã¥ã¢ã«ãåŠç¿
ãããšåœ¹ç«ã¡ãŸã ã çè«ã¯
ãŠã£ãããã£ã¢ã§åŠã¶ããšãã§ããŸãã
ã¢ã€ãœã¡å³ãäœæãããšãã¯ã次ã®èŠåã«åŸãå¿
èŠããããŸãã
- 空ã®çå°ºæ§ã°ãªããããå§ããŠããã¯ã»ã«ç²ŸåºŠãç¶æããŸãã
- ã°ã©ãã£ãã¯ãåçŽãªçå°ºæ§ã¿ã€ã«ç»åã«åå²ããŠã¿ãŠãã ããã
- åã¿ã€ã«ãééå¯èœãŸãã¯ééäžèœã«ããŸãã ããããªããšãééå¯èœãªé åãšééã§ããªãé åã®äž¡æ¹ãå«ãã¿ã€ã«ã§äœæ¥ããããšãå°é£ã«ãªããŸãã
- ã»ãšãã©ã®ã¿ã€ã«ã¯ãã¬ãã«ãä»»æã®æ¹åã«ã¿ã€ã«è¡šç€ºã§ããããã«ã·ãŒã ã¬ã¹ã§ããå¿
èŠããããŸãã
- ã¬ã€ã€ãŒãå«ããœãªã¥ãŒã·ã§ã³ã䜿çšããªãå Žåãæåã«ã°ã©ãŠã³ãã¬ã€ã€ãŒã«åœ±ãæç»ãããæ¬¡ã«ãã£ã©ã¯ã¿ãŒïŒãŸãã¯æšãä»ã®ãªããžã§ã¯ãïŒããããã¬ã€ã€ãŒã«æç»ãããå Žåãã·ã£ããŠãäœæããããšã¯å°é£ã§ãã è€æ°ã®ã¬ã€ã€ãŒã䜿çšããªãå Žåã¯ã圱ãåæ¹ã«èœã¡ãããã«ããããšãã°æšã®åŸãã«ç«ã£ãŠããããŒããŒãèŠããªãããã«ããŠãã ããã
- çå°ºæ§ã¿ã€ã«ã®æšæºãµã€ãºãè¶
ããã¿ã€ã«ç»åã䜿çšããå¿
èŠãããå Žåã¯ãã¿ã€ã«ã®æšæºãµã€ãºã®åæ°ã®ãµã€ãºãéžæããŠãã ããã ãã®ãããªå Žåã¯ãã¬ã€ã€ãŒã䜿çšããŠãã°ã©ãã£ãã¯ãé«ãã«å¿ããŠããŸããŸãªéšåã«åãåããããšããå§ãããŸãã ããšãã°ãæšã¯æ ¹ãå¹¹ãèã®3ã€ã®éšåã«ã«ããã§ããŸãã ãã®ãããæ·±ãã«å¯Ÿå¿ããã¬ã€ã€ãŒã«ããŒããæãããšãã§ãããããæ·±ãã®ãœãŒããç°¡åã«ãªããŸãã
åäžã®ã¿ã€ã«ãµã€ãºãã倧ããçå°ºæ§ã¿ã€ã«ã¯ãæ·±ãã§ãœãŒããããšãã«åé¡ãåŒãèµ·ãããŸãã ãã®ãããªåé¡ã¯ã次ã®èšäºã§å¯ŸåŠãããŠããŸãã
é¢é£ããæçš¿
5.çå°ºæ§æå
ãŸããã²ãŒã å
ã§ã©ã®æ¹åã«ç§»åã§ããããæ±ºå®ããå¿
èŠããããŸãã éåžžãã²ãŒã ã§ã¯4ã€ãŸãã¯8ã€ã®æ¹åã«ç§»åã§ããŸãã æ¬¡ã®å³ãèŠãŠã2次å
空éãšçå°ºæ§ç©ºéã®é¢ä¿ãçè§£ãââãŠãã ããã

ããããã¥ãŒã®ã²ãŒã ã§ã¯ãäžããŒãæŒããšãã£ã©ã¯ã¿ãŒãåçŽã«äžã«ç§»åããŸãããçå°ºæ§ã²ãŒã ã§ã¯å³äžã®è§ã«åãã£ãŠ45床ã®è§åºŠã§ç§»åããŸãã
ããããã¥ãŒã®å Žåãäžæ¹åã«èŠãããã£ã©ã¯ã¿ãŒã¢ãã¡ãŒã·ã§ã³ã®ã»ããã1ã€äœæãããã¹ãŠã®ã¢ãã¡ãŒã·ã§ã³ãå転ãããã ãã§ãã ã¢ã€ãœã¡ããªãã¯ãã£ã©ã¯ã¿ãŒã®ã°ã©ãã£ãã¯ã®å Žåã蚱容å¯èœãªåæ¹åã®ã¢ãã¡ãŒã·ã§ã³ãäœæããå¿
èŠããããŸããã€ãŸãã8æ¹åã®ç§»åã®å Žåãã¢ã¯ã·ã§ã³ããšã«8ã€ã®ã¢ãã¡ãŒã·ã§ã³ãäœæããå¿
èŠããããŸãã
çè§£ã容æã«ããããã«ãæ¹åã¯éåžžãåãããå西ããã西ããªã©ãšåŒã°ããŸãã æåãã¬ãŒã ã§ã¯ãå³ã¯åæ±ããæèšåãã«åºå®äœçœ®ã®ãã¬ãŒã ã瀺ããŠããŸãã

ãã£ã©ã¯ã¿ãŒãã¿ã€ã«ãšåãããã«é
眮ããŸãã ãã£ã©ã¯ã¿ãŒã®ç§»åã¯ããã«ã«ã座æšãèšç®ããããããçå°ºæ§ã«å€æããããšã«ããå®è¡ãããŸãã ããŒããŒãã䜿çšããŠãã£ã©ã¯ã¿ãŒãå¶åŸ¡ãããšããŸãã
2ã€ã®å€æ°
dX
ãš
dY
ãå²ãåœãŠãŸãããã®å€ã¯ãæŒãããã³ã³ãããŒã«ããŒã«äŸåããŸãã ããã©ã«ãã§ã¯ããããã®å€æ°ã¯
0
ã§ããã以äžã®è¡šã«åŸã£ãŠå€ãå²ãåœãŠãããŸããããã§ã
ã
ã
ãããã³
ã¯ãããããã
äžäž ã
å·Šå³ã®æ¹åããŒãæå³ããŸãã ããŒã®äžã®å€
1
ã¯ããŒãæŒãããŠããããšãæå³ãã
0
æŒãããŠããªãããšãæå³ããŸãã
dX dY ================ 0 0 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 -1 0 0 1 0 1 0 0 0 0 1 -1 0 1 0 1 0 1 1 1 0 0 1 -1 1 0 1 1 0 1 -1 0 1 0 1 -1 -1
dX
ãš
dY
å€ã䜿çšããŠã次ã®ããã«ãã«ã«ã座æšãæŽæ°ã§ããŸãã
newX = currentX + (dX * speed); newY = currentY + (dY * speed);
ãããã£ãŠã
dX
ãš
dY
ã¯ãæŒãããããŒã«å¿ããŠãXãšYã§ã®ãã£ã©ã¯ã¿ãŒã®äœçœ®ã®å€åã衚ããŸãã äžèšã®ããã«ãæ°ããçè§åº§æšãç°¡åã«èšç®ã§ããŸãã
Iso = cartesianToIsometric(new Phaser.Point(newX, newY))
æ°ããçå°ºæ§ã®äœçœ®ãåãåã£ãã
ããã£ã©ã¯ã¿ãŒããã®äœçœ®ã«
ç§»åããå¿
èŠããããŸãã
dX
ãš
dY
å€ã«åºã¥ããŠããã£ã©ã¯ã¿ãŒãã©ã®æ¹åãåããŠããããçè§£ããé©åãªã¢ãã¡ãŒã·ã§ã³ã䜿çšã§ããŸãã ãã£ã©ã¯ã¿ãŒãç§»åããåŸããã£ã©ã¯ã¿ãŒã®ã¿ã€ã«åº§æšã倿Žãããå¯èœæ§ããããããæ·±åºŠã«ããé©åãªäžŠã¹æ¿ãã§ã¬ãã«ãåæç»ããããšãå¿ããªãã§ãã ããã
è¡çªèªè
è¡çªã®èªèã¯ããªããžã§ã¯ãã®æ°ããèšç®ãããäœçœ®ã®ã¿ã€ã«ãééã§ããªããã©ããããã§ãã¯ããããšã«ãã£ãŠå®è¡ãããŸãã ãããã£ãŠãæ°ããäœçœ®ãèŠã€ããåŸãããã«ãã£ã©ã¯ã¿ãŒãç§»åããããšã¯ã§ããŸããããŸãããã®å Žæãã©ã®çš®é¡ã®ã¿ã€ã«ãå æããŠãããã確èªããå¿
èŠããããŸãã
tile coordinate = getTileCoordinates(isometricToCartesian(current position), tile height); if (isWalkable(tile coordinate)) { moveCharacter(); } else {
isWalkable()
颿°ã§ã¯ãæå®ããã座æšã®ã¬ãã«ããŒã¿é
åã®å€ããã©ããŒã¹ã¿ã€ã«ãã©ããã確èªããŸãã ãŸãããã£ã©ã¯ã¿ãŒãèŠããªãã¿ã€ã«ã«ééããå Žåã«åããŠããã£ã©ã¯ã¿ãŒã
åããŠããªãå Žåã§ã ããã£ã©ã¯ã¿ãŒãèŠãŠããæ¹åãæŽæ°ããå¿
èŠããããŸãã
ããã¯æ£ãã解決çã®ããã«æããŸãããããªã¥ãŒã ã®ãªããªããžã§ã¯ãã«å¯ŸããŠã®ã¿æ©èœããŸãã è¡çªãèšç®ããããã«ã1ã€ã®ãã€ã³ãïŒãã£ã©ã¯ã¿ãŒã®äžå¿ç¹ïŒã®ã¿ãèæ
®ããŸãã å®éãç¹å®ã®2次å
ã®äžå¿ç¹ãã4ã€ã®è§åºŠããã¹ãŠèŠã€ããããããã¹ãŠã®è§åºŠã®è¡çªãèšç®ããå¿
èŠããããŸãã ã³ãŒããŒã®ããããã貫éã§ããªãã¿ã€ã«ã«èœã¡ãå Žåããã£ã©ã¯ã¿ãŒãç§»åããããšã¯ã§ããŸããã
æåã«ããæ·±ããœãŒã
ã©ããªã«äžèªç¶ã«èŠããŠ
ããåãç»åãµã€ãºã®çå°ºæ§ã®äžçã®ãã£ã©ã¯ã¿ãŒãšããªãŒã¿ã€ã«ãèããŠã¿ãŸãããã
æ·±ãã«ãããœãŒãã®çè§£ãæ·±ããããã«ãæåã®X座æšãšY座æšãããªãŒã®åº§æšãããå°ããå ŽåãããªãŒãæåãšéãªãããšãçè§£ããå¿
èŠããããŸãã ãã£ã©ã¯ã¿ãŒã®X座æšãšY座æšãããªãŒã®åº§æšããã倧ããå Žåããã£ã©ã¯ã¿ãŒã¯ããªãŒã«éãªããŸãã X座æšãçããå Žåãæ±ºå®ã¯Y座æšã§ã®ã¿è¡ãããŸããY座æšã倧ãããªããžã§ã¯ãã¯å¥ã®ãªããžã§ã¯ããšéãªããŸãã Y座æšãäžèŽããå Žåãæ±ºå®ã¯Xã§ã®ã¿è¡ãããŸããXã倧ãããªããžã§ã¯ãã¯ä»ã®ãªããžã§ã¯ããšéãªããŸãã
äžèšã®ããã«ãã¢ã«ãŽãªãºã ã®åçŽåããŒãžã§ã³ã¯ãé¢ããã¿ã€ã«ïŒã€ãŸãã
tile[0][0]
ïŒãã飿¥ããã¬ãã«ãŸã§ãè¡ããšã«ã¬ãã«ãåçŽã«æç»ããããšã«ãããŸãã ãã£ã©ã¯ã¿ãŒãã¿ã€ã«ãå æããå Žåãæåã«åå°ã¿ã€ã«ãæç»ããæ¬¡ã«ãã£ã©ã¯ã¿ãŒã¿ã€ã«ãæç»ããŸãã ãã£ã©ã¯ã¿ãŒãå£ã®ã¿ã€ã«ãå æã§ããªããããããã¯ããŸãæ©èœããŸãã
6.ãã¢ã®æéã§ãïŒ
Phaserã®
ãã¢ã¯ãã¡ãã§ãã ã¯ãªãã¯ããŠã€ã³ã¿ã©ã¯ãã£ãé åã«åãæ¿ããŠãããç¢å°ããŒã§ãã£ã©ã¯ã¿ãŒãå¶åŸ¡ããŸãã æãã«ç§»åããã«ã¯ã2ã€ã®ããŒãæŒããŸãã
7.åéãããã¢ã€ãã
åéãããã¢ã€ãã ã¯ãã¬ãã«ã§æŸãããšãã§ããã¢ã€ãã ã§ãããéåžžããããèžãã ãã§ãã ããšãã°ãã³ã€ã³ãã¯ãªã¹ã¿ã«ã匟è¬ãªã©ã§ãã
以äžã«ç€ºãããã«ãã¢ã€ãã ããŒã¿ã¯ã¬ãã«ããŒã¿ã«çŽæ¥ä¿åã§ããŸãã
[ [1,1,1,1,1,1], [1,0,0,0,0,1], [1,0,8,0,0,1], [1,0,0,8,0,1], [1,0,0,0,0,1], [1,1,1,1,1,1] ]
ãã®ã¬ãã«ã®ããŒã¿ã§ã¯ãèã®ã¿ã€ã«äžã®ãªããžã§ã¯ãã瀺ãããã«
8
ã䜿çšããŸãïŒåè¿°ã®ããã«
1
ãš
0
ã¯èãšå£ã瀺ããŸãïŒã ããã¯ããªããžã§ã¯ãã®ç»åãéããããèã¿ã€ã«ã®ã¿ã€ã«ç»åã§ãã ãã®ããžãã¯ã«ããã°ãã¢ã€ãã ãé
眮ã§ããã¿ã€ã«ããšã«2ã€ã®ç°ãªãç¶æ
ã®ã¿ã€ã«ãå¿
èŠã«ãªããŸãã1ã€ã¯ã¢ã€ãã ããããã1ã€ã¯ã¢ã€ãã ãªãã§ãã¢ã€ãã ãåãåã£ãåŸã«è¡šç€ºãããŸãã
éåžžãã¢ã€ãœã¡ããªãã¯ã°ã©ãã£ãã¯ã¹ã«ã¯ãå€ãã®éè¡å¯èœãªã¿ã€ã«ããããŸãã äžèšã®ã¢ãããŒãã䜿çšããå Žåãæã¡äžããNåã®ãªããžã§ã¯ããããå Žåãæ¢åã®30åã®ã¿ã€ã«ã«å¯ŸããŠN x 30ãå¿
èŠã«ãªããŸãããããã¯ããŸã广çã§ã¯ãããŸããã ãããã£ãŠããã®ãããªçµã¿åãããåçã«äœæããå¿
èŠããããŸãã ãã®åé¡ã解決ããã«ã¯ãäžèšã§äœ¿çšããã®ãšåãæ¹æ³ã§ãã£ã©ã¯ã¿ãŒãé
眮ããŸãã ã¢ã€ãã ã®ããã¿ã€ã«ã«å°éãããããŸãèã®ã¿ã€ã«ãæç»ããæ¬¡ã«ãã®äžã«ã¢ã€ãã ãé
眮ããŸãã ãããã£ãŠã30åã®ééå¯èœãªã¿ã€ã«ã«å ããŠãNåã®ã¢ã€ãã ã¿ã€ã«ã ããå¿
èŠã§ãããã¬ãã«ããŒã¿ã®åçµã¿åãããç€ºãæ°å€ãå¿
èŠã§ãã N x 30ã®å€ãå
¥åããªãããã«ããããã«ã
pickupArray
ãšã¯å¥ã«ãã¢ã€ãã ããŒã¿ãä¿åããããã®åå¥ã®
pickupArray
ãä¿åã§ããŸãã ã¢ã€ãã ã®å®æããã¬ãã«ã以äžã«ç€ºããŸãã

ãã®äŸã§ã¯ãããã·ã³ãã«ã«ãããªããžã§ã¯ãã«å¥ã®é
åã䜿çšããŸããã
ã¢ã€ãã ãæŸã
ãªããžã§ã¯ãèªèã¯ãè¡çªèªèãšåãæ¹æ³ã§å®è¡ãããŸããããã£ã©ã¯ã¿ãŒãç§»åããåŸã§ãã if(onPickupTile()){ pickupItem(); } function onPickupTile(){
颿°onPickupTile()
ã§ã¯levelData
ã座æšã®é
åã®å€ãheroMapTile
ãªããžã§ã¯ããå«ãã¿ã€ã«ãã©ããã確èªããŸããlevelData
ãã®ã¿ã€ã«ã®åº§æšã®é
åå
ã®çªå·ã¯ãã¢ã€ãã ã®ã¿ã€ãã瀺ããŸãããã£ã©ã¯ã¿ãŒãç§»åããåã«è¡çªããã§ãã¯ããŸãããã¢ã€ãã ã¯åŸã«ãã§ãã¯ãããŸãïŒè¡çªã®å Žåããã£ã©ã¯ã¿ãŒã¯ãã§ã«ééã§ããªãã¿ã€ã«ã§å ããããŠããå Žåããã€ã³ããåãããšãã§ããŸããããªããžã§ã¯ãã®å Žåããã£ã©ã¯ã¿ãŒã¯ã¿ã€ã«ã«èªç±ã«ç§»åã§ããŸãããŸããè¡çªããŒã¿ã¯éåžžå€æŽãããããšã¯ãªããã¢ã€ãã ãããã¯ã¢ãããããšã¢ã€ãã ããŒã¿ã倿Žãããããšã«ã泚æããŠãã ããã ïŒããã¯éåžžãé
åã®å€ããlevelData
äŸãã°ãã8
ã«å€æŽããã ã0
ã§ããïŒããã¯åé¡ã«ã€ãªãããŸããã¬ãã«ãåèµ·åããå¿
èŠãããå Žåãã€ãŸãããã¹ãŠã®ãªããžã§ã¯ããå
ã®ãã€ã³ãã«åŸ©å
ããå¿
èŠãããå Žåã¯ã©ããªããŸããïŒlevelData
ã¢ã€ãã ãçºçãããšé
åãå€åãããããããã«é¢ããæ
å ±ã¯ãããŸããã解決çã¯ãã²ãŒã äžã«ã¬ãã«é
åã®ã³ããŒã䜿çšããé
åã倿ŽããªãããšlevelData
ã§ããããšãã°ãlevelData
and ã䜿çšããŠlevelDataLive[]
ãã¬ãã«ã®æåã®æåã®æåŸã®ã¯ããŒã³ãäœæããã²ãŒã äžã«ã®ã¿å€æŽãlevelDataLive[]
ãŸããããšãã°ãåã¢ã€ãã ãåéããåŸãç¡æã®èçã¿ã€ã«ã«ã©ã³ãã ãªã¢ã€ãã ãäœæããå€ãå¢ãããŸãpickupCount
ãæ©èœã¯pickupItem
次ã®ãšããã§ãã function pickupItem(){ pickupCount++; levelData[heroMapTile.y][heroMapTile.x]=0;
ãã£ã©ã¯ã¿ãŒãã¿ã€ã«äžã«ãããšãã¯ãã€ã§ãã¢ã€ãã ããã§ãã¯ããããšã«æ°ã¥ããã§ããããããã¯1ç§éã«æ°åçºçããå¯èœæ§ããããŸãïŒãŠãŒã¶ãŒãç§»åãããšãã®ã¿ãã§ãã¯ããŸããã1ã€ã®ã¿ã€ã«ã§äœåºŠãç¹°ãè¿ãããšãã§ããŸãïŒããäžèšã®ããžãã¯ã¯æ£ããå®è¡ãããŸããæã
ã¯ãã¢ã¬ã€ããŒã¿å²ãåœãŠããlevelData
å€ã0
ãªããžã§ã¯ããæã¡äžããã®æåã®æ€åºæã«ãåŸç¶ã®ãã¹ãŠã®ãã§ãã¯ãonPickupTile()
ã¿ã€ã«ã«æ»ããŸãfalse
ããã®ã€ã³ã¿ã©ã¯ãã£ããªäŸãã芧ãã ããã8.ããªã¬ãŒã¿ã€ã«
ååã瀺ããšãããããªã¬ãŒã¿ã€ã«ã¯ããã¬ãŒã€ãŒãèžããããŒãæŒããšã¢ã¯ã·ã§ã³ãããªã¬ãŒããŸãããã¬ã€ã€ãŒãå¥ã®å Žæã«ãã¬ããŒãããããã²ãŒããéããããæµãäœæãããã§ããŸããããæå³ã§ã¯ãåéãããã¢ã€ãã ã¯åã«ç¹æ®ãªã¿ã€ãã®ããªã¬ãŒã§ãããã¬ã€ã€ãŒãã³ã€ã³ã§ã¿ã€ã«ãèžããšãã³ã€ã³ãæ¶ããŠã«ãŠã³ã¿ãŒãäžãããŸãããã¬ã€ã€ãŒãå¥ã®ã¬ãã«ã«å°ããã¢ãå®è£
ããæ¹æ³ãèŠãŠã¿ãŸãããããã¢ã®æšªã®ã¿ã€ã«ãããªã¬ãŒã«ãªããŸãããã¬ãŒã€ãŒãxããŒãæŒããšãå¥ã®ã¬ãã«ã«ç§»åããŸãã
ã¬ãã«ã倿Žããã«ã¯ãçŸåšã®é
ålevelData
ãæ°ããã¬ãã«ã®é
åã«çœ®ãæããŠãããæ°ããäœçœ®ãšæ¹åãå²ãåœãŠãã ãã§ããheroMapTile
ãã£ã©ã¯ã¿ãŒãééã§ãããã¢ã®ãã2ã€ã®ã¬ãã«ããããšããŸãããã¢ã®é£ã®å°é¢ã®ã¿ã€ã«ã¯äž¡æ¹ã®ã¬ãã«ã§ã¢ã¯ãã£ããªã¿ã€ã«ã«ãªããããã¬ãã«ã«è¡šç€ºãããæ°ãããã£ã©ã¯ã¿ãŒã®äœçœ®ãšããŠäœ¿çšã§ããŸããããã§ã®å®è£
ã®ããžãã¯ã¯ãåéãããã¢ã€ãã ã®ããžãã¯ãšåãã§ããããªã¬ãŒã¿ã€ã«ã®å€ãä¿åããã«ã¯ãå床arrayã䜿çšãlevelData
ãŸãããã®äŸã§2
ã¯ããã¢ã®ããã¿ã€ã«ãæå³ãããã®é£ã®å€ãããªã¬ãŒã«ãªããŸããç§ã䜿çšããŠãã101
ãš102
ã100ãè¶
ããå€ã®å€§ããæã€ä»»æã®ã¿ã€ã«ãã¿ã€ã«ã¢ã¯ãã£ãã«ãªããšå€æãããã€ãã¹100ã®å€ã¯ãããããªãŒãããã¬ãã«ã§ãã var level1Data= [[1,1,1,1,1,1], [1,1,0,0,0,1], [1,0,0,0,0,1], [2,102,0,0,0,1], [1,0,0,0,1,1], [1,1,1,1,1,1]]; var level2Data= [[1,1,1,1,1,1], [1,0,0,0,0,1], [1,0,8,0,0,1], [1,0,0,0,101,2], [1,0,1,0,0,1], [1,1,1,1,1,1]];
ããªã¬ãŒã€ãã³ãã確èªããããã®ã³ãŒãã以äžã«ç€ºããŸãã var xKey=game.input.keyboard.addKey(Phaser.Keyboard.X); xKey.onUp.add(triggerListener);
ãã®é¢æ°triggerListener()
ã¯ãæå®ããã座æšã§ããªã¬ãŒããŒã¿é
åã®å€ã100ãã倧ãããã©ããã確èªããŸãããããããªããã¿ã€ã«å€ãã100ãåŒãããšã§ãã©ã®ã¬ãã«ã«è¡ãå¿
èŠãããããæ±ºå®ããŸãããã®é¢æ°ã¯ãæ°ããããªã¬ãŒã§ã¿ã€ã«ããªã¬ãŒãèŠã€ãlevelData
ãŸããããã¯ããã£ã©ã¯ã¿ãŒäœæã®åº§æšã«ãªããŸããxããŒãæŸããããšãã«ããªã¬ãŒãèµ·åããŸãããæŒãããããŒãåçŽã«èªã¿åããšãããŒãæŒãããŠããéã«ã¬ãã«éã§ç§»åãããµã€ã¯ã«ã§èªåèªèº«ãèŠã€ããããšãã§ããŸããããã¯ããã£ã©ã¯ã¿ãŒãåžžã«ã¢ã¯ãã£ããªã¿ã€ã«ã®æ°ããã¬ãã«ã§äœæãããããã§ãããããå®éã®ãã¢ã§ããèžã¿ãªããã¢ã€ãã ãåéãããã¢ã®åã«ç«ã£ãŠxãæŒããŠã¬ãã«ã倿ŽããŸãã9.ã·ã§ã«
匟䞞ãéæ³ãããŒã«ãªã©ãç¹å®ã®é床ã§ç¹å®ã®æ¹åã«ç§»åããã·ã§ã«ãåŒã³åºããŸãããã£ã©ã¯ã¿ãŒã«é¢é£ãããã®ã¯ãã¹ãŠãã·ã§ã«ã«é©çšãããŸãããã ããé«ãã¯äŸå€ã§ããã·ã§ã«ã¯éåžžãå°é¢ã§ã¯è»¢ãããŸããããç¹å®ã®é«ãã§é£è¡ããŸãã匟䞞ã¯ãã£ã©ã¯ã¿ãŒã®ãŠãšã¹ãã¬ãã«ã§é£ã¶ãããããŒã«ã¯ãžã£ã³ãããããšããã§ããŸããè峿·±ãããšã«ãçå°ºæ§ã®é«ãã¯2次å
åŽé¢å³ã®é«ãã«å¯Ÿå¿ããŠããŸããããµã€ãºã¯å°ãããªã£ãŠããŸããè€éãªå€æã¯ãããŸããããã«ã«ã座æšã®ããŒã«ãå°é¢ãã10ãã¯ã»ã«äžã«ããå Žåãã¢ã€ãœã¡ããªãã¯åº§æšã§ã¯ã10ãã¯ã»ã«ãŸãã¯6ãã¯ã»ã«ã§å°é¢ããäžã«ãªããŸãã ïŒãã®å Žåã察å¿ãã軞ã¯Y軞ã«ãªããŸããïŒãã§ã³ã¹ã§å²ãŸããåºã®åšããçŸèµ°ããããŒã«ãå®çŸããŠã¿ãŸãããããªã¢ã«ãã远å ããã«ã¯ãããŒã«ã«åœ±ã远å ããŸããå¿
èŠãªã®ã¯ãããŠã³ã¹ã®é«ãã®å€ãããŒã«ã®çå°ºæ§å€Yã«è¿œå ããããšã§ãããªããŠã³ãã®é«ãã®å€ã¯ãéåã«å¿ããŠãã¬ãŒã ããšã«å€åããããŒã«ãå°é¢ã«è§Šãããšããã«ãYè»žã«æ²¿ã£ãŠçŸåšã®é床ã®ç¬Šå·ã倿ŽããŸãã倿°ã«ãã£ãŠããŒã«ã®è·³ãè¿ãã®åŒ·ãã瀺ããŸãzValue
ããŸããããŒã«ã®ããŠã³ã¹åã100ãã€ãŸãã§ãããšãzValue = 100
ãŸããç§ãã¡ã¯2ã€ã®å€æ°ã䜿çšããŸããincrementValue
æåã¯éèŠãªå€æ°0
ãgravity
ãã1ã€ã¯éèŠãªå€æ°ã§ã-1
ãåãã¬ãŒã ã§æžç®ããŸãincrementValue
ã¢ãŠãzValue
åã³æžç®gravity
ããincrementValue
æžè¡°å¹æãäœæããŸããã«zValue
éãã0
ãšãããŒã«ãå°é¢ã«å°éããããšãæå³ããŸãããã®æç¹ã§ãsignã倿ŽãincrementValue
ãããã«ä¹ç®-1
ããæ£ã®æ°ã«å€æããŸããããã¯ã次ã®ãã¬ãŒã ããããŒã«ãäžã«ç§»åãå§ãããã€ãŸãããŠã³ãããããšãæå³ããŸããã³ãŒãã§ã¯æ¬¡ã®ããã«ãªããŸãã
if(game.input.keyboard.isDown(Phaser.Keyboard.X)){ zValue=100; } incrementValue-=gravity; zValue-=incrementValue; if(zValue<=0){ zValue=0; incrementValue*=-1; }
ã¢ã€ãœã¡ãã¥ãŒã®å Žåãã³ãŒããåããŸãŸã§ãããããªéãããããŸãzValue
ãããå°ããªåæå€ã䜿çšããŸãã以äžã¯zValue
ãy
ã¬ã³ããªã³ã°äžã«ããŒã«ã®ã¢ã€ãœã¡ããªãã¯åº§æšã®å€ã«ã©ã®ããã«è¿œå ããããã瀺ããŠããŸãã function drawBallIso(){ var isoPt= new Phaser.Point();
ã€ã³ã¿ã©ã¯ãã£ããªäŸãåç
§ããŠãã ãããåœ±ãæŒãã圹å²ã¯éåžžã«éèŠã§ããããã®å¹»æ³ã«ãªã¢ãªãºã ãå ããŸãããŸãã2ã€ã®ã¹ã¯ãªãŒã³åº§æšïŒxããã³yïŒã䜿çšããŠãã¢ã€ãœã¡ããªãã¯åº§æšã§3次å
ã衚ãããšã«æ³šæããŠãã ãããã¹ã¯ãªãŒã³åº§æšã®Y軞ã¯ã¢ã€ãœã¡ããªãã¯åº§æšã®Z軞ã§ããããŸããããã¯ãããã«ãããããããŸããã10.ãã¹ãèŠã€ããŠãã®äžãç§»åãã
ãã¹ãèŠã€ããŠããã«æ²¿ã£ãŠç§»åããã®ã¯ãããªãè€éãªããã»ã¹ã§ãã2ã€ã®ãã€ã³ãéã®ãã¹ãèŠã€ããã«ã¯ãããŸããŸãªã¢ã«ãŽãªãºã ã䜿çšããããŸããŸãªãœãªã¥ãŒã·ã§ã³ããããŸãlevelData
ãã2次å
é
åã§ããããããã¹ãŠãå¯èœãªéãåçŽã§ãããã¬ãŒã€ãŒãå æã§ããäžæã®ããŒããæç¢ºã«å®çŸ©ããŠãããããããééã§ãããã©ãããç°¡åã«ç¢ºèªã§ããŸããé¢é£ããæçš¿
ãã®èšäºã§ã¯ããã¹æ€çŽ¢ã¢ã«ãŽãªãºã ã®è©³çŽ°ãªæŠèŠã¯å€§ããããŸãããæãäžè¬çãªæ¹æ³ãæçãã¹ã¢ã«ãŽãªãºã ããã®æãæåãªå®è£
ã¯A *ããã³ãã€ã¯ã¹ãã©ã®ã¢ã«ãŽãªãºã ã§ããç§ãã¡ã®ç®æšã¯ãéå§ããŒããšçµäºããŒããæ¥ç¶ããããŒããèŠã€ããããšã§ããéå§ããŒãããã8ã€ã®ãã¹ãŠã®é£æ¥ããŒãã蚪åããèšªåæžã¿ãšããŠããŒã¯ããŸãããã®ããã»ã¹ã¯ã蚪åãããæ°ãããµã€ãããšã«ååž°çã«ç¹°ãè¿ãããŸããåã¹ã¬ããã¯ã蚪åããããŒãã远跡ããŸãã飿¥ããŒãã«è¡ããšãããã§ã«èšªããããŒãã¯ã¹ããããããŸãïŒååž°ã¯åæ¢ããŸãïŒãããã»ã¹ã¯æåŸã®ããŒãã«å°éãããŸã§ç¶ããŸããæåŸã®ããŒãã§ã¯ååž°ãå®äºããç§»åãããã¹å
šäœãããŒãã®é
åãšããŠè¿ãããŸãããšã³ãããŒãã«å°éã§ããªãå ŽåããããŸããã€ãŸãããã¹ã®æ€çŽ¢ã倱æããŸããéåžžãããŒãéã«ããã€ãã®ãã¹ããããŸãããã®å Žåãæå°æ°ã®ããŒããæã€ãããã®1ã€ãéžæããŸããéãæ¢ã
æç¢ºã«å®çŸ©ãããã¢ã«ãŽãªãºã ã«é¢ããŠã¯ãè»èŒªãåçºæããã®ã¯æããªããšãªã®ã§ãæ¢åã®ãœãªã¥ãŒã·ã§ã³ã䜿çšããŠæ¹æ³ãèŠã€ããŸããPhaserã§ã¯JavaScriptãœãªã¥ãŒã·ã§ã³ãå¿
èŠãªã®ã§ãEasyStarJSãéžæããŸããããã¹æ€çŽ¢ãšã³ãžã³ã¯æ¬¡ã®ããã«åæåãããŸãã easystar = new EasyStar.js(); easystar.setGrid(levelData); easystar.setAcceptableTiles([0]); easystar.enableDiagonals();
é
åã¯ä»¥élevelData
ã®ã¿ãå«ã0
ãš1
ç§ãã¡ã¯ããŒãã®é
åã«çŽæ¥æž¡ãããšãã§ããŸãã0
ééå¯èœãªããŒãã瀺ããå€ããŸããæãã«ç§»åããæ©èœããªã³ã«ããŸããããç§»åãééã§ããªãã¿ã€ã«ã®è§ã«è¿ã¥ããšãªãã«ããŸãããããã¯ãæãã®åãã§ãã£ã©ã¯ã¿ãŒãééã§ããªãã¿ã€ã«ã«è¡çªããå¯èœæ§ãããããã§ãããã®å Žåãè¡çªèªèã·ã¹ãã ã¯ãã£ã©ã¯ã¿ãŒã®ééãèš±å¯ããŸãããããã«ããã®äŸã§ã¯ãã£ã©ã¯ã¿ãŒã人工ç¥èœãšãšãã«ç§»åãããããè¡çªèªèãå®å
šã«åé€ãããŠããããšã«æ³šæããŠãã ãããããã¯å¿
é ã§ã¯ãããŸãããã¬ãã«å
ã®ç©ºãã¿ã€ã«ã®ã¯ãªãã¯ãèªèãã颿°ã䜿çšããŠãã¹ãèšç®ããŸãfindPath
ãã³ãŒã«ããã¯ã¡ãœããplotAndMove
ã¯ãäœæããããã¹ã®ããŒãã®é
åãååŸããŸããèŠã€ãã£ããã¹ãã«ããŒã¯ã
ãŸãã game.input.activePointer.leftButton.onUp.add(findPath) function findPath(){ if(isFindingPath || isWalking)return; var pos=game.input.activePointer.position; var isoPt= new Phaser.Point(pos.x-borderOffset.x,pos.y-borderOffset.y); tapPos=isometricToCartesian(isoPt); tapPos.x-=tileWidth/2;

éã«æ²¿ã£ãåã
ããŒãã®é
åã®åœ¢åŒã§ãã¹ãåãåã£ããããã£ã©ã¯ã¿ãŒã匷å¶çã«ããã«æ²¿ã£ãŠç§»åãããå¿
èŠããããŸããã¯ãªãã¯ããã¿ã€ã«ã«ãã£ã©ã¯ã¿ãŒãç§»åãããããšããŸãããŸãããã£ã©ã¯ã¿ãŒãå ããŠããããŒããšã¯ãªãã¯ããããŒãã®éã®ãã¹ãæ¢ããŸãããã¹ãèŠã€ãã£ãããæåãããŒãé
åã®æåã®ããŒãã«ç§»åãããããå®å
ãšããŠããŒã¯ããå¿
èŠããããŸããå®å
ããŒãã«å°éããããããŒãã®é
åã«ããã«ããŒãããããã©ããã確èªããããå Žåã¯ãæçµããŒãã«å°éãããŸã§æ¬¡ã®ããŒããå®å
ãšããŠããŒã¯ããŸãããŸããããŒãã«å°éãããã³ã«ãçŸåšã®ããŒããšæ°ããå®å
ããŒãã«åºã¥ããŠãã¬ãŒã€ãŒã®æ¹åã倿ŽããŸããããŒãéã§ã¯ãç®çã®ããŒãã«å°éãããŸã§æ£ããæ¹åã«æ©ããŸããããã¯éåžžã«åçŽãªAIã§ããããã®äŸã§ã¯ãaiWalk
以äžã«éšåçã«ç€ºãã¡ãœããã§å®è£
ãããŠããŸãã function aiWalk(){ if(path.length==0){
æ£ããããŠã¹ã¯ãªãã¯ãã€ã³ããé€å€ããå¿
èŠããããŸãããããè¡ãã«ã¯ãå£ã¿ã€ã«ãä»ã®è²«éã§ããªãã¿ã€ã«ã§ã¯ãªããæ©è¡å¯èœãªé åãã¯ãªãã¯ãããšå€æããŸããAIã®ã³ãŒãã£ã³ã°ã®ãã1ã€ã®è峿·±ãç¹ïŒçŸåšã®ããŒãã«å°éãããšããã«ãããŒãã®é
åå
ã®æ¬¡ã®ã¿ã€ã«ã«ãã£ã©ã¯ã¿ãŒãçŽé¢ããã®ã¯æãŸãããããŸããã代ããã«ããã£ã©ã¯ã¿ãŒãã¿ã€ã«ã«æ°æ©è¡ãã®ãåŸ
ã£ãŠãããæ¬¡ã®ç®çå°ãæ¢ãå§ããå¿
èŠããããŸãããŸããã¿ãŒã³ã®çŽåã«çŸåšã®ã¿ã€ã«ã®äžå€®ã«ãã£ã©ã¯ã¿ãŒãæåã§é
眮ããŠããã¹ãŠãæé«ã«èŠããããã«ããããšããå§ãããŸããåäœãã¢ãèŠãããšãã§ããŸãã11.çå°ºã¹ã¯ããŒã«
ã¬ãã«é åãç»é¢é åãããã¯ããã«å€§ããå Žåãã¹ã¯ããŒã«ããå¿
èŠããããŸãã
衚瀺å¯èœãªç»é¢é åã¯ãã¬ãã«é åå
šäœã®å€§ããªé·æ¹åœ¢ã®äžã®å°ããªé·æ¹åœ¢ãšèŠãªãããšãã§ããŸããã¹ã¯ããŒã«ãšã¯ãåã«å
åŽã®é·æ¹åœ¢ãå
åŽã«ç§»åããããšã§ããéåžžãã¹ã¯ããŒã«åŠçäžãç»é¢ã®é·æ¹åœ¢å
ã®ãã£ã©ã¯ã¿ãŒã®äœçœ®ã¯äžå®ã®ãŸãŸã§ããã»ãšãã©ã®å Žåãç»é¢ã®äžå€®ã«ãããŸããè峿·±ãããšã«ãã¹ã¯ããŒã«ãå®è£
ããã«ã¯ãå
åŽã®åè§åœ¢ã®ã³ãŒããŒãã€ã³ãã远跡ããã ãã§ãããã«ã«ã座æšã§æå®ãããã®ã³ãŒããŒãã€ã³ãã¯ãã¬ãã«ããŒã¿ã®ã¿ã€ã«ã®1ã€ã«è©²åœããŸããã¹ã¯ããŒã«ããã«ã¯ããã«ã«ã座æšã®X軞ãšYè»žã«æ²¿ã£ãŠã³ãŒããŒãã€ã³ãã®äœçœ®ãå¢ãããŸããããã§ããã®ãã€ã³ããçè§åº§æšã«å€æãããããã䜿çšããŠç»é¢ãæç»ã§ããŸããçè§ç©ºéã§ã®æ°ãã倿å€ã¯ãç»é¢ã®è§åºŠãã€ãŸãnewã§ããå¿
èŠããããŸã(0, 0)
ããããã£ãŠãã¬ãã«ããŒã¿ãè§£æããã³ã¬ã³ããªã³ã°ãããšãããã®å€ãåã¿ã€ã«ã®çè§äœçœ®ããæžç®ããŸããæ°ããã¿ã€ã«ã®äœçœ®ãç»é¢å
ã«ãããã©ããã倿ã§ããŸãããŸãã¯ããµã€ãºX x Yã®çå°ºæ§ã¿ã€ã«ã®ã°ãªãããç»é¢äžã«æç»ããŠãã¬ã³ããªã³ã°ãµã€ã¯ã«ã倧ããªã¬ãã«ã§æå¹ã«ãªãããã«ããããšãã§ããŸãããããã®ãã¹ãŠã®æé ã¯ã次ã®ããã«è¡šçŸã§ããŸãã- Xããã³Yã³ãŒããŒãã€ã³ãã®ãã«ã«ã座æšãæŽæ°ããŸãã
- ã¢ã€ãœã¡ç©ºéã«å€æããŸãã
- åã¿ã€ã«ã®çè§æç»äœçœ®ãããã®å€ãæžç®ããŸãã
- ãã®æ°ããè§åºŠããéå§ããŠãæå®ãããæ°ã®ã¿ã€ã«ã®ã¿ãç»é¢ã«æç»ããŸãã
- ãªãã·ã§ã³ïŒå³é¢ã®æ°ããçè§äœçœ®ãç»é¢å
ã«ããå Žåã«ã®ã¿ãã¿ã€ã«ãæç»ããŸãã
var cornerMapPos=new Phaser.Point(0,0); var cornerMapTile=new Phaser.Point(0,0); var visibleTiles=new Phaser.Point(6,6);
ã³ãŒããŒãã€ã³ãã®å¢åã¯ããã£ã©ã¯ã¿ãŒãç§»åãããšãã«ãã£ã©ã¯ã¿ãŒã®äœçœ®ãæŽæ°ããæ¹åãšã¯åå¯Ÿã®æ¹åã«çºçããããšã«æ³šæããŠãã ãããããã«ããããã£ã©ã¯ã¿ãŒã¯ç»é¢ã«å¯ŸããŠåãå Žæã«æ®ããŸãããã®äŸãèŠãŠãã ããïŒç¢å°ããŒã䜿çšããŠã¹ã¯ããŒã«ããããŠã¹ãã¯ãªãã¯ããŠè¡šç€ºãããŠããã°ãªãããæ¡å€§ããŸãïŒãããã€ãã®ã¡ã¢ïŒ- , .
- , , . , X Y, X , Y . , .
- - , .
- , . . . ?
ãããã«
ãã®ãã¥ãŒããªã¢ã«ã¯ãäž»ã«çå°ºæ§ã²ãŒã ã®äžçãåŠã¶åå¿è
ã察象ãšããŠããŸããããã§ç޹ä»ããæŠå¿µã®å€ãã«ã¯ãä»ã®ããè€éãªãœãªã¥ãŒã·ã§ã³ããããç§ã¯æå³çã«æãåçŽãªãã®ãéžæããŸããããã®ããã¥ã¢ã«ã§ã¯ããã¹ãŠã®åé¡ã解決ã§ããããã§ã¯ãããŸããããåãåã£ãæ
å ±ã«ããããããã®æŠå¿µãéçºããŠããè€éãªãœãªã¥ãŒã·ã§ã³ãäœæã§ããŸããããšãã°ãå®è£
ãããæ·±ãã«ããåçŽãªäžŠã¹æ¿ãã¯ãè€æ°ã®ããã¢ãšãã©ãããã©ãŒã ã¿ã€ã«ãããããã¢ããå¥ã®ããã¢ã«ç§»åããã¬ãã«ã®å Žåã«ã¯åœ¹ã«ç«ã¡ãŸãããããããããã¯å¥ã®ãã¥ãŒããªã¢ã«ã®ã¿ã¹ã¯ã§ãã