Поддельные 3D 2D от первого лица Engine Game Maker Studio
Я уже несколько дней работаю только над фальшивым 3D-движком своей игры и, похоже, не могу создать вид из видео ниже. Думаю, я понял, как правильно масштабировать спрайты. Я не могу понять, как вращать мир спрайтов. Я могу только перемещать мировые спрайты по оси x влево или вправо в зависимости от того, какие клавиши вращения объекта игрока используются. Я не совсем понимаю, как продублировать, как видео вращается на 360 градусов, чтобы игрок мог видеть объекты спереди или сзади, и как на самом деле заставить объекты мира выглядеть так, как будто они вращаются.
Как только моя переменная faceDir достигает 360 или -360, она сбрасывается в 0. Я не уверен, является ли это частью проблемы, но я не вижу другого способа подделать полный поворот на 360 и получить точные показания.
Я только хочу использовать 2D математику / функции для этого проекта.
Посмотреть скрипт, используемый объектами мира
objectSprite=argument0
//Draw
if x>obj_player.x //Draws sprite if in front of player
{draw_sprite_ext(argument0,0,x+obj_player.facingDir,
sprite_height+400,obj_player.scaling,obj_player.scaling,0,c_white,1)}
//Scaling Size Limit
if obj_player.scaling>=4
{obj_player.scaling=4}
else if obj_player.scaling<=1
{obj_player.scaling=1}
Код, используемый объектами мира для доступа к скрипту вида
script_execute(scr_view,spr_SPRITE_NAME)
Игрок создает код события
facingDir=0
scaling=0
viewSector=1
Код события шага игрока
//Restart Game
if keyboard_check_pressed(vk_tab)
{game_restart()}
//Rotate Limit
if facingDir>360
{facingDir=0}
else if facingDir<-360
{facingDir=0}
//Rotate Left - Rotates Right View - Negative facingDir
if keyboard_check(ord('A'))
{facingDir-=2}
//Rotate Right - Rotates Left View - Positive facingDir
if keyboard_check(ord('D'))
{facingDir+=2}
//Move Forwards
if keyboard_check(ord('W'))
{motion_set(facingDir,4)
scaling+=0.2}
//Move Backwards
if keyboard_check(ord('S'))
{motion_set(facingDir,-4)
scaling-=0.2}
//Stop Movement
if keyboard_check_released(ord('W')) or keyboard_check_released(ord('S'))
{speed=0}
//View Sector Tracking - Positive
//Positive - North
if facingDir>0 and facingDir<45
{viewSector=1}
//Positive - North West
if facingDir>292.5 and facingDir<315
{viewSector=2}
//Positive - West
if facingDir>225 and facingDir<270
{viewSector=3}
//Positive - South West
if facingDir>202.5 and facingDir<225
{viewSector=4}
//Positive - South
if facingDir>135 and facingDir<180
{viewSector=5}
//Positive - South East
if facingDir>112.5 and facingDir<135
{viewSector=6}
//Positive - East
if facingDir>45 and facingDir<90
{viewSector=7}
//Positive - North East
if facingDir>22.5 and facingDir<67.5
{viewSector=8}
//View Sector Tracking - Negative
//Negative - North
if facingDir<0 and facingDir>-45
{viewSector=1}
//Negative - North East
if facingDir<-22.5 and facingDir>-67.5
{viewSector=2}
//Negative - East
if facingDir<-45 and facingDir>-90
{viewSector=3}
//Negative - South East
if facingDir<-112.5 and facingDir>-135
{viewSector=4}
//Negative - South
if facingDir<-135 and facingDir>-180
{viewSector=5}
//Negative - South West
if facingDir<-202.5 and facingDir>-225
{viewSector=6}
//Negative - West
if facingDir<-225 and facingDir>-270
{viewSector=7}
//Negative - North West
if facingDir<-292.5 and facingDir>-315
{viewSector=8}
//
image_angle=facingDir
Плеер рисует графический код
//Draw Labels and Variables
draw_text(20,0,'Direction')
draw_text(150,20,'X')
draw_text(200,20,x)
draw_text(300,20,'Y')
draw_text(350,20,y)
draw_text(20,20,facingDir)
draw_text(20,40,'View Sector')
draw_text(20,60,viewSector)
//View Sectors
if viewSector=1
{draw_text(160,40,'North')}
else if viewSector=2
{draw_text(160,40,'North East')}
else if viewSector=3
{draw_text(160,40,'East')}
else if viewSector=4
{draw_text(160,40,'South East')}
else if viewSector=5
{draw_text(160,40,'South')}
else if viewSector=6
{draw_text(160,40,'South West')}
else if viewSector=7
{draw_text(160,40,'West')}
else if viewSector=8
{draw_text(160,40,'North West')}
Поддельный 3D-тест: https://www.youtube.com/watch?v=wuUXPRzPC3E
Файл проекта: http://www.megafileupload.com/tjnN/Raycasting.gmx.zip