我几天来一直在研究我的游戏的假3D引擎,似乎无法在下面的视频中创建视图。我想我已经弄清楚如何正确地缩放精灵。我似乎无法弄清楚如何旋转世界精灵。我只能在x轴上向左或向右滑动世界精灵,具体取决于使用哪个玩家对象旋转键。我很困惑如何复制视频如何完全旋转360度,以便玩家能够看到前方或后方的物体,以及如何让世界物体看起来像是在旋转。
一旦我的facingDir变量达到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
播放器绘制GUI代码
//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')}