H
Harmony
Guest
So recently I have been trying to work with Tile collision instead of object collision. So what happens is the up and down are perfectly normal, they don't allow the player through. The main problem is that when you walk to the left or right of a certain block it would move the character up or down one depending on where it was. Even more, when you hold up/down it would launch you at light speed. Just wondering what I am doing wrong. I have tried to flip some numbers and where the collision boxes meet, but nothing seems to change how it works.
Code:
//Create
//Variables
//tile maps
var l = layer_get_id("collision_map");
tilemap = layer_tilemap_get_id(l);
//sprite info
sprite_bbox_left = sprite_get_bbox_left(sprite_index) - sprite_get_xoffset(sprite_index);
sprite_bbox_right = sprite_get_bbox_right(sprite_index) - sprite_get_xoffset(sprite_index);
sprite_bbox_bottom = sprite_get_bbox_bottom(sprite_index) - sprite_get_yoffset(sprite_index);
sprite_bbox_top = sprite_get_bbox_top(sprite_index) - sprite_get_yoffset(sprite_index);
Code:
//Step
//Collision
var dy = 15;
var dx = 15;
if ( dy > 0) {
var t1 = tilemap_get_at_pixel(tilemap, bbox_left, bbox_bottom) & tile_index_mask;
var t2 = tilemap_get_at_pixel(tilemap, bbox_right, bbox_bottom) & tile_index_mask;
if (t1 != 0 || t2 != 0){
y = ((bbox_bottom & ~63) - 1) - sprite_bbox_bottom
}
}
if ( dy > 0) {
var t1 = tilemap_get_at_pixel(tilemap, bbox_left, bbox_top) & tile_index_mask;
var t2 = tilemap_get_at_pixel(tilemap, bbox_right, bbox_top) & tile_index_mask;
if (t1 != 0 || t2 != 0){
y = ((bbox_top + 64) & ~63) - sprite_bbox_top
}
}
if ( dx > 0) {
var t1 = tilemap_get_at_pixel(tilemap, bbox_right, bbox_top) & tile_index_mask;
var t2 = tilemap_get_at_pixel(tilemap, bbox_right, bbox_bottom) & tile_index_mask;
if (t1 != 0 || t2 != 0){
x = ((bbox_right & ~63) - 1) - sprite_bbox_right;
}
} if (dx > 0) {
var t1 = tilemap_get_at_pixel(tilemap, bbox_left, bbox_top) & tile_index_mask;
var t2 = tilemap_get_at_pixel(tilemap, bbox_left, bbox_bottom) & tile_index_mask;
if (t1 != 0 || t2 != 0){
x = ((bbox_left + 64) & ~63) - sprite_bbox_left;
}
}