TileMap:getPositionAt question

Hi,

Please see below code:

//Touch Cubic1 Layer Event//
this.maptilelayer.node.on(cc.Node.EventType.TOUCH_START, function (touch,event) {
self.touchingleft = true;
var layer = self.maptilelayer.getLayerName(‘cubic1’);
// get all tiles
var tiles = self.maptilelayer.getTiles();
var TILE_WIDTH_HALF = self.maptilelayer.getMapTileSize().width;
var TILE_HEIGHT_HALF = self.maptilelayer.getMapTileSize().height;
var loc = self.maptilelayer.node.convertToNodeSpace(touch.getLocation());
var tw = self.maptilelayer.getMapTileSize().width;
var th = self.maptilelayer.getMapTileSize().height;
var mw = self.maptilelayer.getLayerSize().width;
var mh = self.maptilelayer.getLayerSize().height;

    var x = (loc.x) * 1;
    var y = (loc.y) * 1;

    var isox = Math.floor(mh - y/th + x/tw - mw/2);
    var isoy = Math.floor(mh - y/th - x/tw + mw/2);
    cc.log("iosx"+isox);
    cc.log("isoy"+isoy);
      // Tile Properties // 
     var tileproperties = self.maptilelayer.getProperties();
     cc.log("Properties: " + tileproperties);
     // Get Tile Position XY
     **var tileposxy = self.maptilelayer.getPositionAt(isox,isoy);**
      cc.log("tileposxy"+tileposxy);
   // Set Player Position to Tile Pos XY //

self.player.setPosition(tileposxy);
// Tile Touch - Change Color //
var tilecolor = self.maptilelayer.getTileAt(isox, isoy);
tilecolor.color = new cc.Color(0, 55, 255);
// tru only if the coords is with in the map
// if(isox < self.maptilelayer.width && isoy < self.maptilelayer.height)
{

     {
           }
             }
                 return true;
             },      </code>

Hope some can offer guidance / help. The issue that I’m having is that when I touch a tile, it’s supposed to place the player on the tile, which it doesn’t, it places the player way off the tile…God Bless…

Sincerely,

Sunday

I’ve tried your code. I think the problem is that you should convert the tileposxy to a position of the player’s parent. The code should be changed like this:

var tileposxy = self.maptilelayer.getPositionAt(isox,isoy);

// convert the local pos to a world pos first.
// Because the tileposxy is the bottom-left position of the tile,
// so tw/2 & th/2 is added for the center of the tile.
var worldPos = self.maptilelayer.node.convertToWorldSpace(cc.p(tileposxy.x + tw / 2, tileposxy.y + th / 2));

// convert the world pos to a pos of player's parent.
var playerLocPos = self.player.parent.convertToNodeSpace(worldPos);
self.player.setPosition(playerLocPos);

Hi @zhangbin

Thanks for your help and guidance, already implemented the code, and it’s working…Thanks again for your help…God Bless…:slight_smile:

Sincerely,

Sunday

Hi @zhangbin

I’m sorry to bother you, but do you think when you have a chance, you can offer some guidance, on how I can use cc.JumpTo to jump to specific tile and number of jumps to get there…, i have the below code:

var playerposxy = self.player.getPosition();
cc.log(“playerposxy”+playerposxy);

// Calculate Number of Jumps //
var numberjumps = ( playerposxy - tileposxy ) / 40 ; 40 being distance between each tile…
cc.log(“numberofjumps”+numberjumps);

      var playerjump = cc.jumpTo(1, cc.p**(playerLocPos**),55,**numberjumps**);

//Player Jump //
self.player.runAction(playerjump);

Thanks again for your guidance…God Bless…

Sincerely,

Sunday

Hi,

Does anyone have some guidance regarding the numberofjumps needed for a player in an isometric tmx map, to get to one tile to the other. Would appreciate guidance…Thanks and God Bless…

Sincerely,

Sunday