gpt4 book ai didi

javascript - createFromObjects() 在移相器中不起作用?

转载 作者:行者123 更新时间:2023-12-03 05:05:05 26 4
gpt4 key购买 nike

我正在尝试用 Phaser 制作游戏。我创建了一个带有对象层的图 block map 。但是,当我尝试将对象从对象层添加到组“跳棋”时,重叠不起作用。这是我的代码:

function preload()
{
game.load.spritesheet("bird","assets/flappybird.png",92,64,3);
game.load.tilemap('map', 'assets/map.json', null, Phaser.Tilemap.TILED_JSON);
game.load.image('tiles', 'assets/obstacle.png');
game.load.image('checktiles', 'assets/empty.png');
game.stage.backgroundColor = '#c9c9c9';

}
function create()
{
game.physics.startSystem(Phaser.Physics.ARCADE);
map = game.add.tilemap('map');
//OBSTACLES
map.addTilesetImage('obstacle', 'tiles');
layer = map.createLayer('Tilelaag 1');
layer.resizeWorld();
map.setCollisionBetween(1, 12);
//CHECKERS
checkers = game.add.group();
checkers.enableBody=true;
map.createFromObjects('Object Checkers', 5, 'checktiles', 0, true, false, checkers);
//PLAYER
player=game.add.sprite(92,game.world.heigth-300,"bird");
player.scale.setTo(0.5,0.5);
game.physics.arcade.enable(player);
player.body.gravity.y=300;
player.animations.add("fly",[0,1,2],10,true);
player.body.collideWorldBounds = true;
player.body.velocity.x=150;
//CURSORS
cursors=game.input.keyboard.createCursorKeys();
spacebar=game.input.keyboard.addKey(Phaser.Keyboard.SPACEBAR);
//CAMERA
game.camera.follow(player);
}
function update()
{
var hit=game.physics.arcade.collide(layer,player);
game.physics.arcade.overlap(player, checkers,Addpoint,null,this);
player.animations.play("fly");
if(spacebar.isDown)
{
player.body.velocity.y = -150;
}
if(hit)
{
game.state.restart();
}
}
function Addpoint()
{
console.log("Called");
}

最佳答案

我想你的 JSON 文件中图层数据后面的某个地方应该有这样的内容:

...
{
"draworder":"topdown",
"height":0,
"name":"Object Checkers",
"objects":[
{
//First object
"height":43.5,
"id":2,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":43.5,
"x":158.25,
"y":178,
"gid":5
},
{
//Second object
"height":43.5,
"id":9,
"name":"",
"rotation":0,
"type":"",
"visible":true,
"width":43.5,
"x":117.5,
"y":257.75,
"gid":5
},
{
//Third object (if it exists), etc...
...

id、旋转、名称、宽度、长度和其他属性当然可以改变,但 GID 不会。您需要数组的每个元素上的 GID 属性(在本例中为 5),您可以手动将其放置在每个对象中。

验证这一点后,它将执行以下操作:

var map, layer, checkers;

function create()
{
game.physics.startSystem(Phaser.Physics.ARCADE);
//Map
map = game.add.tilemap('map');
//I understand that here is the name of the tileset as specified in the map data.
map.addTilesetImage('tiles');
layer = map.createLayer('Tilelaag 1');
layer.resizeWorld();
map.setCollisionBetween(1, 12);
//Checkers
checkers = game.add.group();
checkers.enableBody = true;
/*
First parameter: string of map objects layer.
Second parameter: Gid.
Third parameter: sprite string to use.
Fourth parameter: value of the frame to initialize the object.
Fifth parameter: default status of the sprite.
Sixth parameter: autocull. The sprites that are autoculled are culled from the camera if out of its range..
Seventh parameter: the group is specified
*/
map.createFromObjects('Object Checkers', 5, 'checktiles', 0, true, false, checkers);
console.log(checkers.length);
//create player, controls, etc...
...
}

有可能物体的位置受到影响,可以使用:

map.createFromObjects('Object Checkers', 5, 'checktiles', 0, true, false, checkers, Phaser.Sprite, false);

example

关于javascript - createFromObjects() 在移相器中不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42039879/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com