2015-12-10 6 views
0

Я создаю веб-игру, используя JavaScript с phaser. Я привык к Java и с трудом разбираюсь в правильном способе создания моей простой кнопочной игры. Игра представляет собой простую карту каждого ландшафта Швеции. Содержимое игры должно быть изменено в зависимости от того, какой пейзаж я нажимаю. Элементы, подлежащие обновлению, могут быть названиями кнопок, текстовыми данными и т. Д.javascript: Несколько обращений спрайтов

Одна из проблем, с которыми я столкнулась при создании множества ландшафтных классов, состоит в том, что m последний созданный пейзаж перезаписывает остальные. Консоль должна записывать имя прессованного ландшафта, но при нажатии на каждый пейзаж генерируется имя моего последнего созданного ландшафтного объекта.

Оглядываясь на мое решение, не получив его так, как я этого хочу, мне интересно, неправильно ли я посмотрю на свою структуру игры.

Есть ли лучший способ сделать это?

Вот ссылка на то, что игра в настоящее время выглядит следующим образом: http://postimg.org/image/l5jthna4x/

<script type="text/javascript"> 

var game = new Phaser.Game(480, 700, Phaser.AUTO, '', { preload: preload, create: create, update: update }); 

function create() { 
    game.stage.backgroundColor = '#7dc3ff'; 

    sweden(0, 0, 'sweden', 10000000); 

    var btnLand = new BtnLand(); 
    btnLand.changeText("Sweden"); 

} 

function update() { 

} 

function render() { 

} 


var BtnLand = function(){ 
    this.btn = game.add.sprite(game.world.centerX, game.world.height, 'btn-main'); 
    this.btn.scale.setTo(0.8, 1); 
    this.btn.anchor.set(0.5, 1) 
    this.btn.inputEnabled = true; 
} 

BtnLand.prototype.changeText = function (title) { 
    this.title = title; 
    var style = { font: "32px Arial", fill: "#000000", wordWrap: true, wordWrapWidth: this.width, align: "center" }; 
    this.text = game.add.text(this.btn.x, this.btn.y, this.title, style); 
    this.text.anchor.set(0.5, 1.5); 
} 


var Landscape = function(x, y, name) { 
    this.landname = name; 

    this.area = game.add.sprite(x, y, this.landname); 
    this.area.anchor.set(0.5); 

    this.area.inputEnabled = true; 
    this.area.events.onInputDown.add(listener, this); 

} 

var sweden = function(x, y, name) { 
    this.smaland = Landscape(230 + x, 483 + y, 'smaland', 720358); 
    this.skane = Landscape(200 + x, 600 + y, 'skane', 1289000); 
    this.blekinge = Landscape(277 + x, 565 + y, 'blekinge', 152315); 
    this.halland = Landscape(127 + x, 505 + y, 'halland', 152315); 

} 


function listener() { 
    console.log("pressed " + landname); 
    btnLand.changeText(landname); 
} 

</script> 

Я ценю все советы я могу получить!

Заранее спасибо.

ответ

0

Я думаю, что основной проблемой будет вызов Landscape как функции, а не как конструктор.

Если вы меняете каждый из звонков Landscape на new Landscape, вы создадите 4 отдельных ландшафта, и область для this будет объектом, а не глобальным.

Смежные вопросы