查看: 3224|回复: 4

[讨论] 高达游戏 , 实体彈幕与碰撞测试 , 使用RGD引擎

[复制链接]
梦石
0
星屑
14720
在线时间
2175 小时
注册时间
2016-9-20
回帖
777
发表于 2020-9-9 12:10:10 | 显示全部楼层 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有账号?注册会员

×
之前看到张咚咚的那个彈幕, 想不到也能做这类遊戏, 但要使用到三角函数的公式,


以Y及X之分速度, 计算角度得出的分速度, 而这需要弧度制转角度制 , 张咚咚的看上去我自己看不懂, 还是要自己写一次, 才能明白其中的公式(其实现在也不懂), 列出子弹移动之公式使用(部分),    zy90d为判断为第几象限开始, 0~89度 得出数值为0 , 91~180度为得出数值为1,181~270为2,271~360度为3, 360度和0度相同, 所以还是把角度等于360度时变成0度, pc90d是第几象限中的角度余数,数值为0~90 ,pc90则为用于计算时使用, 所以是浮点数, 最后@suz_x,和@suz_y, 是储存计算之座标, 是浮点数, 所以最后才精灵图象的x,y值等于@suz_x,@suz_y , 不然会小数点被忽略不计, 那么@speed 经计算后, 会把合速度分解为x,y两个分速度, 用于移动, 第一象限就右上,所以X轴+,Y轴- , 第二象限就左上, 所以X轴-,Y轴-,第三象限左下,X轴-,Y轴-,第四象限右下, X轴+,Y轴+ , 一开始的give_angle 是把超过360度的角度转为正角, 所以减360度, 负角就加去360度

cos角度为邻比斜 , 那么减去的角度就作为另一个轴之角度计算 (已知斜轴长度, 和角度求出X,Y轴的公式) , 要使用三角函数
如: 0~89度
speedx = Math.cos(pc90*Math::PI/180.0)*@speed
speedy = Math.cos(downangle*Math::PI/180.0)*@speed


代碼如下:(仅限參考

[pre lang="ruby"]give_angle = @g_amm.angle
  if give_angle > 360
    give_angle =  (give_angle-360)
  elsif give_angle < 0
    give_angle =  (give_angle+360)
  end
@g_amm.angle = give_angle
if  true#子弹之自动向前移动#Kboard.keyb($R_Key_NUMPAD8)
  pc90d = (@g_amm.angle%90).to_i
  zy90d = (@g_amm.angle/90).to_i
  pc90 = @g_amm.angle%90
  #0~90度(包含)360
if @g_amm.angle >= 0 and @g_amm.angle <=90
if @g_amm.angle == 0
  speedx = @speed
  speedy = 0
  end
if @g_amm.angle == 90
  speedy = @speed
  speedx = 0
end

  
if @g_amm.angle != 0 and @g_amm.angle !=90
downangle = 90- pc90
speedx = Math.cos(pc90*Math::PI/180.0)*@speed
speedy = Math.cos(downangle*Math::PI/180.0)*@speed

end
@suz_x +=speedx
@suz_y -=speedy

end
#90度并合发散


####test
if @g_amm.angle == 180
  speedy = 0
  speedx = @speed
  @suz_x -=speedx
  #return
end
if @g_amm.angle == 270
  speedy = @speed
  speedx = 0
  @suz_y +=speedy
  #return
end
  if @g_amm.angle == 360 #or @g_amm.angle == 0
  speedy = 0
  speedx = @speed
  @suz_x +=speedx
#return
end

####


  #91~180度
  if pc90d >=1 and pc90d <=90 and zy90d == 1 or @g_amm.angle == 91.0


if pc90d != 1 and pc90d !=90 or @g_amm.angle == 91.0
downangle = 90- pc90#@g_amm.angle
speedx = Math.cos(downangle*Math::PI/180.0)*@speed
speedy = Math.cos(pc90*Math::PI/180.0)*@speed

end
@suz_x -=speedx
@suz_y -=speedy

  end
   
  #181~270度
  if pc90d >=1 and pc90d <=90 and zy90d == 2 or @g_amm.angle == 181.0



if pc90d != 1 and pc90d !=90 or @g_amm.angle == 181.0
downangle = 90- pc90
speedx = Math.cos(pc90*Math::PI/180.0)*@speed
speedy = Math.cos(downangle*Math::PI/180.0)*@speed

end
@suz_x -=speedx
@suz_y +=speedy
  end
  #270~359度

  if pc90d >=1 and pc90d <=90 and zy90d == 3 or @g_amm.angle == 271.0

if pc90d != 1 and pc90d !=90 or @g_amm.angle == 271.0
downangle = 90- pc90
speedx = Math.cos(downangle*Math::PI/180.0)*@speed
speedy = Math.cos(pc90*Math::PI/180.0)*@speed

end
@suz_x +=speedx
@suz_y +=speedy
  end

  

#,
##{(@g_amm.angle%90).to_i},#{(@g_amo.angle/90).to_i}

# 提示xy速度,以及角度
#pst  "x速度#{speedx},y速度#{speedy},角度#{@g_amm.angle} "
end


#向前行走(使用變量來制定小數点,sprite,x,y不支持小數點)
   @runed_long += @speed#b
  end #def[/pre]

至于相对位移, 以屏幕原点之中心, 这樣会
$屏幕位移_x= @suz_x- $Screen_X/2 #$Screen_X為屏幕之X軸長度比如640  (p_car主角作為參考点)
$屏幕位移_y= @suz_y- $Screen_Y/2 #$Screen_Y為屏幕之Y軸長度比如480

@p_car.x =  @suz_x-$屏幕位移_x  #主角和屏幕之位移
@p_car.y =  @suz_y-$屏幕位移_y

@g_amm.x = @suz_x - $屏幕位移_x   #彈幕和屏幕之位移
@g_amm.y = @suz_y - $屏幕位移_y

彈幕, 但是如果高达配件, 也还是要想公式, 因为我想每个配件都有独立的体积判断, 不是整机
把方形分成三等分,根椐图片的高度而定, 然后
以中间的方形为中心,利用cos邻比斜求出方框中的移位(也是子弹移动合速度的公式) 来定位三个矩形
QQ图片20200909115115.png QQ图片20200909115130.gif



RGSS3 是50怪时, 会變成10幀,發彈幕差不多 , 屏幕外20幀
至于RGD , 50怪时依舊60幀, 但發彈幕会尤其多时會掉幀至40多, 目測是我没优化, 总是和所有敌人对称軸包圍盒AABB所計算, 因此如优化應該还有一些幀數提升空間,


彈幕遊戏演示:
https://www.bilibili.com/video/BV13D4y1o7NT

轴对称包围盒參考网站:
https://aotu.io/notes/2017/02/16/2d-collision-detection/


彈幕角度公式 (射擊之角度) 參考了@张咚咚 的条条丝丝弹幕游戏
https://rpg.blue/thread-410703-1-1.html
贴子只供参考我贴子内容有很多只是我自己标识的内容代指不是原来意思,偏向发贴当时的想法(后来回看贴发现有很多错误,会造成误导 ),如果想靠谱点应 找相关正确的文章   -- 2025/4/19

老黄鸡

梦石
4
星屑
45694
在线时间
7948 小时
注册时间
2009-7-6
回帖
13337

MZ评测员RM创作大赛01组委会开拓者贵宾

发表于 2020-9-9 13:15:40 | 显示全部楼层
RGD的sprite十分高效,做弹幕游戏的优势很大
楼主每次都能拿出有意思的东西啊
RGDirect - DirectX驱动的RGSS,点我了解.
(排满,暂停)RM全系列成套系统定制请联系QQ1213237796
不接受对其他插件维护的委托
回复

使用道具 举报

梦石
0
星屑
19426
在线时间
3082 小时
注册时间
2013-1-11
回帖
1207
发表于 2020-9-9 18:27:41 | 显示全部楼层
感觉可以加个截肢系统,就更有意思了

点评

这个高达弹幕也不做下去了, 虽然实际每个部件可以打掉, 但此游戏只是理论上的, 所以不会真的做出正式的游戏, 就这样不会再做下去了  发表于 2020-9-9 20:50
https://rpg.blue/thread-410854-1-1.html 兩年前問过你矩形旋轉問題,但發現旋轉矩形复杂,所以我还是最終没旋轉,使用多个正放的方形就行了  发表于 2020-9-9 18:59
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部