์ด๋ฒ์๋ ๋งต ํฌ๊ธฐ๋ฅผ ๋ ๋๋ฆฌ๊ณ ํ๋ฉด์ ์คํฌ๋กค ํ๋๊ฑธ ๊ตฌํํด ๋ณด์.
http://aaaga.dothome.co.kr/test/index.html
์์ ์ ๊ฒฐ๊ณผ๋ ์ฌ๊ธฐ์ ํ์ธํ ์ ์์.
๋ง์ฐฌ๊ฐ์ง๋ก main.js์ ์์ ๋ ๋ถ๋ถ์ ๋นจ๊ฐ๊ฒ ํ์ํ ๊ฒ
enchant();
window.onload = function(){
var winsize = window.innerWidth/window.innerHeight;
var core = new Core(160*winsize.toFixed(2), 160);
core.preload ('img.png','map.png');
core.onload = function(){
core.rootScene.backgroundColor = 'yellow';
var label = new Label('์๋ ์ธ๊ณ!')
var sprite = new Sprite(16, 16);
sprite.image = core.assets['img.png'];
sprite.moveTo(16, 16);
sprite.frame = [0,0,0,0,1,1,1,1];
var controller0 = new Sprite(32, 32);
controller0.backgroundColor = 'black';
controller0.opacity = 0.2;
var controller1 = new Sprite(16, 16);
controller1.backgroundColor = 'black';
controller1.opacity = 0.3;
var map = new Map(16, 16);
map.image = core.assets['map.png'];
map.loadData([
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]); //๋งต ํฌ๊ธฐ๊ฐ ๋๋ฐฐ๋ก ๋์ด์ง ์ซ์๋ฅผ ๋ฐ๊ฟ์ ๋ง๋๋ก ๋งต๋ฐฐ์น๋ฅผ ํด๋ด๋ ์ข์
map.collisionData = [
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0],
[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]]; //๋งต ํฌ๊ธฐ๊ฐ ๋๋ฐฐ๋ก ๋์ด์ง 0์ ์ง๋๊ฐ์ ์๋๊ณณ 1์ ์ง๋๊ฐ์ ์๋๊ณณ
var movego ={};
var movend ={};
var angle = 0;
var toward = 0;
var tox = 0; //tox ๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ ๋ค. ์ซ์๋ฅผ ๋ํ๋
var toy = 0; //toy ๋ผ๋ ์ค๋ธ์ ํธ๋ฅผ ๋ง๋ ๋ค. ์ซ์๋ฅผ ๋ํ๋
core.rootScene.on('touchstart', function(e){
movego.x = e.x;
movego.y = e.y;
core.rootScene.addChild(controller0);
core.rootScene.addChild(controller1);
});
core.rootScene.on('touchmove', function(e){
movend.x = e.x;
movend.y = e.y;
angle = Math.atan2(movego.x-movend.x,movego.y-movend.y);
if (-0.78539<angle && angle<0.78539) {toward = 1};
if (-2.35619<angle && angle<-0.78539) {toward = 2};
if (0.78539<angle && angle <2.35619) {toward = 3};
if (2.35619<angle && angle<3.14159 || -3.14159<angle && angle<-2.35619) {toward = 4}
});
core.rootScene.on('touchend', function(e){
toward = 0;
core.rootScene.removeChild(controller0);
core.rootScene.removeChild(controller1);
});
core.rootScene.on('enterframe', function(){
label.text = toward;
switch(toward){
case 0: break;
case 1: sprite.frame = [6,6,6,6,7,7,7,7];
if (map.hitTest(sprite.x, sprite.y-1)){sprite.moveBy(0,-1);}; break;
case 2: sprite.frame = [2,2,2,2,3,3,3,3];
if (map.hitTest(sprite.x+16, sprite.y)){sprite.moveBy(1,0);}; break;
case 3: sprite.frame = [4,4,4,4,5,5,5,5];
if (map.hitTest(sprite.x-1, sprite.y)){sprite.moveBy(-1,0);}; break;
case 4: sprite.frame = [0,0,0,0,1,1,1,1];
if (map.hitTest(sprite.x, sprite.y+16)){sprite.moveBy(0,1);}; break;
};
tox = Math.min((core.width) / 2 - sprite.x, 0); //tox ์๋ค ํ๋ฉด์ ๋ฐ์ผ๋ก ๋๋๊ฐ์์ sprite์ x์ขํ๊ฐ์ ๋บ๊ฐ์ด๋ 0์ ๋น๊ตํด์ ์์๊ฑธ ์ง์ด๋ฃ๋๋ค.
toy = Math.min((core.height) / 2 - sprite.y, 0); //toy์๋ค ํ๋ฉด์ ๋ฐ์ผ๋ก ๋๋๊ฐ์์ sprite์ y์ขํ๊ฐ์ ๋บ๊ฐ์ด๋ 0์ ๋น๊ตํด์ ์์๊ฑธ ์ง์ด๋ฃ๋๋ค.
tox = Math.max(core.width, tox + map.width) - map.width; //tox์ ๋ค์ ํ๋ฉด์ ๊ฐ๋กํฌ๊ธฐ๋ ์์์ ์ง์ด๋ฃ์ tox๊ฐ์ ๋งต์ ์ฒดํฌ๊ธฐ์ ๊ฐ๋ก๊ฐ์ ๋ํ๊ฒ์ค์ ํฐ๊ฑธ ์ ํํด์ ๊ทธ ๊ฐ์์ ๋งต ๊ฐ๋กํฌ๊ธฐ๋งํผ ๋บ ์๋ฅผ ์ง์ด๋ฃ๋๋ค
toy = Math.max(core.height, toy + map.height) - map.height; //toy์ ๋ค์ ํ๋ฉด์ ์ธ๋กํฌ๊ธฐ๋ ์์์ ์ง์ด๋ฃ์ toy๊ฐ์ ๋งต์ ์ฒดํฌ๊ธฐ์ ์ธ๋ก๊ฐ์ ๋ํ๊ฒ์ค์ ํฐ๊ฑธ ์ ํํด์ ๊ทธ ๊ฐ์์ ๋งต ๊ฐ๋กํฌ๊ธฐ๋งํผ ๋บ ์๋ฅผ ์ง์ด๋ฃ๋๋ค
core.rootScene.x = tox; //๊ฒ์ํ๋ฉด์ ๊ฐ๋ก์ขํ๋ฅผ tox๋ก ์ฎ๊ธด๋ค
core.rootScene.y = toy; //๊ฒ์ํ๋ฉด์ ์ธ๋ก์ขํ๋ฅผ toy๋ก ์ฎ๊ธด๋ค
controller0.moveTo(-tox +movego.x -16,-toy + movego.y-16); //controller0๋ฅผ ํด๋น ์ขํ๋ก ์ด๋์ํจ๋ค
controller1.moveTo(-tox +movend.x-8, -toy + movend.y-8); //controller1์ ํด๋น ์ขํ๋ก ์ด๋์ํจ๋ค
});
core.rootScene.addChild(map);
core.rootScene.addChild(sprite);
core.rootScene.addChild(label);
};
core.start();
};
์ด๋ ์ ๋๊ฐ๋๊ฑฐ ๊ฐ์? ๋ฉ๋ชจ์ฅ๊ณผ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ผ๋๊ณ ์๋ก๊ณ ์นจ ํด๊ฐ๋ฉด์
๊ฐ์ ๋ฐ๊พธ๊ณ ์ ์ฅํ๊ณ ์๋ก๊ณ ์นจ ์ด๊ฑธ ๋ฐ๋ณตํ๋ฉด
ํ ์คํธ๋ก ๋์ด์์ด๋ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ธฐ ์ฌ์ธ๊ฑฐ์ผ
์ด ์์ ๋ฅผ ์ด๊ฒ์ ๊ฒ ๋ฐ๊ฟ๊ฐ๋ฉด์ ํ ์คํธ ํ๋ฉด์ ์ด๊ฑด ์ ์ด๊ฐ์ผ๊น๋ฅผ ๊ณ ๋ฏผํด๋ณด๋ฉด ์ข์
๋๊ธ 0