Po zapoznaniu się z tym tutorialem this mogę załadować pliki mapy json utworzone przez kafelkowy edytor map w mojej grze javascript/canvas.Odczytywanie pliku edytora map JSON i wyświetlanie na płótnie
ive dostał się do punktu, w którym ja wdrożyły własne rodzaj wersji, i otrzymuję żadnych błędów w Firebug w konsoli lub net itp
I o ile widzę, poprzez umieszczenie w console.logs i alarmy, skrypt działa absolutnie dobrze!
Problem polega na tym, że płótno pozostaje puste! kiedy powinien już mieć na sobie tilemap.
Oto moja wersja tutoriala wdrożone w mojej grze:
function Level() {
var c;
var data;
var layers = [];
this.get_map = function(name,ctx){
c = ctx;
$.getJSON('maps/'+ name + '.json', function(json){
get_tileset(json);
});
};
function get_tileset(json) {
data = json;
this.tileset = $("<img />", { src: json.tilesets[0].image })[0];
this.tileset.onload = renderLayers(this);
}
function renderLayers(layers){
layers = $.isArray(layers) ? layers : data.layers;
layers.forEach(renderLayer);
}
function renderLayer (layer){
if (layer.type !== "tilelayer" || !layer.opacity) {
alert("Not a tileLayer");
}
var s = c.canvas.cloneNode(),
size = data.tileWidth;
s = s.getContext("2d");
if (layers.length < data.layers.length) {
layer.data.forEach(function(tile_idx, i) {
if (!tile_idx) { return; }
var img_x, img_y, s_x, s_y,
tile = data.tilesets[0];
tile_idx--;
img_x = (tile_idx % (tile.imagewidth/size)) * size;
img_y = ~~(tile_idx/(tile.imagewidth/size)) * size;
s_x = (i % layer.width) * size;
s_y = ~~(i/layer.width) * size;
s.drawImage(this.tileset, img_x, img_y, size, size,
s_x, s_y, size, size);
});
layers.push(s.canvas.toDataURL());
c.drawImage(s.canvas, 0, 0);
}
else {
layers.forEach(function(src) {
var i = $("<img />", { src: src })[0];
c.drawImage(i, 0, 0);
});
}
}
}
i nazywa się to z moim głównym pliku JavaScript, który jest taki:
$(document).ready(function(){
var canvas = document.getElementById("TBG");
var ctx = canvas.getContext("2d");
var ui = new Gui();
var level = new Level();
//----------Login/Register Gui --------------
$('#TBG').hide();
$('#load-new').hide();
$('#reg').hide();
$('#login').hide();
//if login_but is clicked do ui.login function
$('#login_but').click(ui.login);
//if reg_but is clicked do ui.register function
$('#reg_but').click(ui.register);
$('#new_but').click(function(){
game_settings("new");
});
$('#load_but').click(function(){
game_settings("load");
});
//if login_sumbit button is clicked do ui.login_ajax function
$("#login_submit").click(ui.login_ajax);
$("#reg_submit").click(ui.register_ajax);
$("#welcome").on("click", "#logout_but", ui.logout);
//________________________
//Initialisation of game
function game_settings(state){
if(state == "load"){
ui.load_game();
//do ajax call to load user last save
level.get_map("level_01",ctx);
}
else{
//set beginning params
//Change screens
ui.new_game();
alert("new game");
}
}
// End Loop ------------------------------------------------------
});
Nie sądzę, jesteś piękny ludzie mogliby zorientować się, dlaczego mapa nie jest drukowana na moim płótnie?
Dzięki za wszelką pomoc Tom
Czy na pewno masz dobre dane json? Spróbuj dodać funkcje .done i .fail do pliku $ .getJSON, a następnie wykonaj debugowanie, aby upewnić się, że otrzymujesz poprawne dane. – markE
tak, dane JSON są w porządku, wierzę. Zrobiłem dziennik konsoli po tym, jak został wprowadzony do funkcji, a także kiedy został przekazany i dane były w porządku –
Czy ktoś ma jakieś pomysły na ten temat? Nie mogę się domyślić, dlaczego nie rysuje! argghhhh haha –