D
Dopaminestudios
Guest
Hello GMC!
So I've been working on a sonic-esque platforming engine. I have the player able to move in all 360 degrees without any hindrance. I'm having trouble with getting the player to slow down when going up the hill and speed up when going down a hill. My engine is based on having 2 sensor dots, one in front of the player and one behind the player. These dots ride along the ground and finds the angle between the front and the back dot. This is put into a global.angle variable that sets the players position.
obj_player_step_1
key_left = keyboard_check(vk_left)
key_right = keyboard_check(vk_right)
key_jump = keyboard_check(vk_space)
if (key_right){
x_speed = -3
}
if (key_left){
x_speed = 3
}
if (!key_right && !key_left) || (key_right && key_left){
x_speed = 0
}
if (global.state = 1){
if (place_free(x,y+1)){
y+= grav
}
}else{
if (global.state = 2){
if (place_free(x+1,y)){
x+= grav
}
}else{
if (global.state = 3){
if (place_free(x,y-1)){
y-= grav
}
}else{
if (global.state = 4){
if (place_free(x-1,y)){
x-= grav
}
}
}
}
}
x += cos( degtorad(global.angle)) * x_speed
y -= sin( degtorad(global.angle)) * x_speed
image_angle = global.angle
scr_quadrants()
obj_sensorA_step_1
if (global.state = 1){
x = obj_player.x + 5
y = obj_player.y + 15
}
if (global.state = 2){
x = obj_player.x + 5
y = obj_player.y - 15
}
if (global.state = 3){
x = obj_player.x - 5
y = obj_player.y - 15
}
if (global.state = 4){
x = obj_player.x - 5
y = obj_player.y + 15
}
if (global.state = 1){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
y-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x,y+1,obj_solid)){
while (!place_meeting(x,y+1,obj_solid)){
y+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 2){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
x-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x+1,y,obj_solid)){
while (!place_meeting(x+1,y,obj_solid)){
x+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 3){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
y+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x,y-1,obj_solid)){
while (!place_meeting(x,y-1,obj_solid)){
y-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 4){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
x+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x-1,y,obj_solid)){
while (!place_meeting(x-1,y,obj_solid)){
x-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
x += cos( degtorad(global.angle)) * x_speed
y -= sin( degtorad(global.angle)) * x_speed
obj_sensorB_step_1
if (global.state = 1){
x = obj_player.x - 5
y = obj_player.y + 15
}
if (global.state = 2){
x = obj_player.x + 5
y = obj_player.y + 15
}
if (global.state = 3){
x = obj_player.x + 5
y = obj_player.y - 15
}
if (global.state = 4){
x = obj_player.x - 5
y = obj_player.y - 15
}
if (global.state = 1){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
y-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x,y+1,obj_solid)){
while (!place_meeting(x,y+1,obj_solid)){
y+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 2){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
x-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x+1,y,obj_solid)){
while (!place_meeting(x+1,y,obj_solid)){
x+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 3){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
y+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x,y-1,obj_solid)){
while (!place_meeting(x,y-1,obj_solid)){
y-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 4){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
x+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x-1,y,obj_solid)){
while (!place_meeting(x-1,y,obj_solid)){
x-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
x += cos( degtorad(global.angle)) * x_speed
y -= sin( degtorad(global.angle)) * x_speed
So I've been working on a sonic-esque platforming engine. I have the player able to move in all 360 degrees without any hindrance. I'm having trouble with getting the player to slow down when going up the hill and speed up when going down a hill. My engine is based on having 2 sensor dots, one in front of the player and one behind the player. These dots ride along the ground and finds the angle between the front and the back dot. This is put into a global.angle variable that sets the players position.
obj_player_step_1
key_left = keyboard_check(vk_left)
key_right = keyboard_check(vk_right)
key_jump = keyboard_check(vk_space)
if (key_right){
x_speed = -3
}
if (key_left){
x_speed = 3
}
if (!key_right && !key_left) || (key_right && key_left){
x_speed = 0
}
if (global.state = 1){
if (place_free(x,y+1)){
y+= grav
}
}else{
if (global.state = 2){
if (place_free(x+1,y)){
x+= grav
}
}else{
if (global.state = 3){
if (place_free(x,y-1)){
y-= grav
}
}else{
if (global.state = 4){
if (place_free(x-1,y)){
x-= grav
}
}
}
}
}
x += cos( degtorad(global.angle)) * x_speed
y -= sin( degtorad(global.angle)) * x_speed
image_angle = global.angle
scr_quadrants()
obj_sensorA_step_1
if (global.state = 1){
x = obj_player.x + 5
y = obj_player.y + 15
}
if (global.state = 2){
x = obj_player.x + 5
y = obj_player.y - 15
}
if (global.state = 3){
x = obj_player.x - 5
y = obj_player.y - 15
}
if (global.state = 4){
x = obj_player.x - 5
y = obj_player.y + 15
}
if (global.state = 1){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
y-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x,y+1,obj_solid)){
while (!place_meeting(x,y+1,obj_solid)){
y+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 2){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
x-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x+1,y,obj_solid)){
while (!place_meeting(x+1,y,obj_solid)){
x+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 3){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
y+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x,y-1,obj_solid)){
while (!place_meeting(x,y-1,obj_solid)){
y-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 4){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
x+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x-1,y,obj_solid)){
while (!place_meeting(x-1,y,obj_solid)){
x-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
x += cos( degtorad(global.angle)) * x_speed
y -= sin( degtorad(global.angle)) * x_speed
obj_sensorB_step_1
if (global.state = 1){
x = obj_player.x - 5
y = obj_player.y + 15
}
if (global.state = 2){
x = obj_player.x + 5
y = obj_player.y + 15
}
if (global.state = 3){
x = obj_player.x + 5
y = obj_player.y - 15
}
if (global.state = 4){
x = obj_player.x - 5
y = obj_player.y - 15
}
if (global.state = 1){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
y-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x,y+1,obj_solid)){
while (!place_meeting(x,y+1,obj_solid)){
y+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 2){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
x-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x+1,y,obj_solid)){
while (!place_meeting(x+1,y,obj_solid)){
x+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 3){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
y+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x,y-1,obj_solid)){
while (!place_meeting(x,y-1,obj_solid)){
y-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
if (global.state = 4){
if (place_meeting(x,y,obj_solid)){
while (place_meeting(x,y,obj_solid)){
x+=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
if (!place_meeting(x-1,y,obj_solid)){
while (!place_meeting(x-1,y,obj_solid)){
x-=1
}
global.angle = point_direction(obj_sensorA.x,obj_sensorA.y,obj_sensorB.x,obj_sensorB.y)
}
}
x += cos( degtorad(global.angle)) * x_speed
y -= sin( degtorad(global.angle)) * x_speed