2016-11-05 6 views
1

easeljs-0.8.2.min Использована плитка с плиточным покрытием JSON.EaselJS (0.8.2.min и выше) - Перемещение JSON сгенерированной карты Sprite XY при перемещении персонажа

У меня есть карта плитки, уже сгенерированная с использованием класса Sprite (класс битмапа устарел сейчас, а Ya потребовалось некоторое время, чтобы понять). Таким образом, он является стандартным 32x32 квадратным сгенерированным ортогональным.

У меня есть персонаж SpriteSheet, который перемещается при прослушивании с клавиатуры. Когда я перемещаю символ Вправо, я хочу, чтобы карта, которая была сгенерирована для панорамирования и перемещения, когда персонаж делает это, так что он выглядит как персонаж, и вы можете увидеть остальную часть карты, которая находится на холсте.

spriteContainer = new createjs.Container(); 

    for (var y = 0; y < layerData.height; y++) { 
    for (var x = 0; x < layerData.width; x++) { 
     // create a new Bitmap for each cell 
     currentMap = new createjs.Sprite(tilesetSheet); 

     // layer data has single dimension array 
     var idx = x + y * layerData.width; 
     // tilemap data uses 1 as first value, EaselJS uses 0 (sub 1 to load correct tile) 
     tileLoad = layerData.data[idx] - 1; 
     currentMap.gotoAndStop(tileLoad); 

    // orthogonal tile positioning based on X Y order from Tiled 
     if(moveX == undefined || moveX == 0){ 
     moveX= 0; 
     } else {} 
     if(moveY == undefined || moveY == 0){ 
     moveY= 0; 
     } else {} 

     currentMap.x = (x * tilewidth - x) + moveX; 
     currentMap.y = (y * tileheight) + moveY; 

     // Pan X & Y 
     // X Minus Pans Right 
     // Y Minus Pans Down 
     // currentMap.x = currentMap.x + 1; 
     // currentMap.y = currentMap.y - 2; 

     mapX = currentMap.x; 
     mapY = currentMap.y; 

     currentMap.setBounds(mapX, mapY, tilewidth, tileheight); 

     spriteContainer.addChild(currentMap); 

     // Add bitmap to stage 
     stage.addChild(currentMap); 

    } 
    } 

Так что я нашел в EaselJS имеет класс с именем, SpriteContainer, я имею в виду, что это решение, которое я, возможно, потребуется, чтобы получить эту работу. Таким образом, карта генерируется, а справа стрелка - клавиша для нажатия. Теперь я попытался:

// Set Map spriteContainer.x = spriteContainer.x + = charWalkSpeed;

Мой отладчик показывает, что координаты X поднимаются, когда я нажимаю клавишу со стрелкой вправо, однако карта не перемещается, и она остается неподвижной. Застрял на этом в течение месяца, и я абсолютно застрял. У меня есть рабочий пример того, что у меня есть до сих пор, но я думаю, что поставляемый исходный код может быть достаточным.

+0

SpriteContainer - это замена контейнера, который использует метод WebGL для рендеринга быстрее. Я буду придерживаться спрайта. – Lanny

+0

Как вы перемещаете спрайт? Вы увеличиваете положение x при нажатии клавиши? Вы обновляете сцену после ее изменения? Можете ли вы опубликовать этот код? – Lanny

+0

Ну, да, класс спрайтов повторяется снова и снова за квадрат. Символ добавляется как: 'code' HeroXCoordinates = HeroPlay0.x + = charWalkSpeed; '/ code' Да, при нажатии клавиши, который делает gotoAndPlay в пресс-релизе, персонаж использует класс SpriteSheet, потому что у него есть анимации, специфичные для того, что он делает.
Моя идея с контейнером состоит в том, чтобы удерживать все эти квадраты и перемещать затем x или y. В вышеприведенном коде позиция имеет значение: 'code' currentMap.x = currentMap.x + 1; // currentMap.y = currentMap.y - 2; '/ code' – l3l00

ответ

0

Хе-хе, понял. Два долгих месяца и, наконец!

текущийMap.parent.x! Так что все происходит панорамирование, как мне кажется, мне даже нравится, что он перемещает объекты Collision! К сожалению, он перемещает панель заголовка, поэтому создавая новую функцию, которая сообщает панели заголовка, она должна оставаться неподвижной. Не плохо.

Следующей задачей является получение tilemap, чтобы не панорамировать, если он достигнет конца tilemap. Таким образом, вы не видите фон холста. У меня заголовок статический, поэтому, как я получил панорамирование, может подтолкнуть меня к тому, как предотвратить кровотечение в панте.