设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索

课余玩耍:抛物线的参数方程

查看数: 4599 | 评论数: 11 | 收藏 0
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2015-3-13 16:07

正文摘要:

本帖最后由 taroxd 于 2015-3-13 18:07 编辑 写代码的动机:太鼓达人中音符飞起的效果大致是一个抛物线,且过两个定点(击打点,魂槽右侧) 于是在自修课无聊时间中构造了这样一个抛物线系:开口向下,过两个定 ...

回复

miantouchi 发表于 2019-6-16 16:44:23
你好,看过你主楼发的手抄版的跳跃代码还有以前VA中“跳跃”的参数方程,麻烦有时间看看我在XP区关于跳跃的问题。感觉你的代码能解决我的问题,但是具体不是太明白你的代码。https://rpg.blue/thread-477598-1-1.html
喵呜喵5 发表于 2015-3-14 14:07:25

点评

各种数学公式做出的移动效果,例如正弦函数做出来的缓动  发表于 2015-3-14 18:29
这是个啥?  发表于 2015-3-14 17:35
zeldafd 发表于 2015-3-14 11:58:06
我表示: 我的拋物線都只是條對稱的二次方程

点评

要是那两个定点对称我也不用这么脑残地玩了……  发表于 2015-3-14 12:07
chd114 发表于 2015-3-14 08:52:11
三途亚梦 发表于 2015-3-13 00:57
天惹噜,抛物线怎么算我都忘记了……

x²=±2py或者y²=±2px
taroxd 发表于 2015-3-14 08:45:26
@晴兰
只是考虑到 t 不是按照 +1 递增的情况,实际使用(见顶楼链接)并未使用迭代器
summer92 发表于 2015-3-13 23:00:20
好厉害的样子,其实啊要做出漂亮的游戏 抛物线 的公式要用到的,悲剧的层主始终没学会
taroxd 发表于 2015-3-13 18:24:07
本帖最后由 taroxd 于 2015-3-13 18:29 编辑
RyanBern 发表于 2015-3-13 18:20
y=[-(x-x0)y1+(x-x1)y0]/(x0-x1) + a*(x-x0)(x-x1)
典型的抛物线系(过两定点)。
沿着二次曲线运动的脚本 ...


不知道为什么,在RM里画曲线我就是想用参数方程

感觉参数方程玩起来比较舒心呢~(大概是因为函数可以作为方法的参数吧) 其实和普通方程没什么本质的区别

写这段代码的时候想到了 https://rpg.blue/thread-375515-1-1.html 的 3
把计算 x,y,opacity 的函数作为参数传给精灵,再提供几个构造简单函数(比如线性,或者这个主题的抛物线)的函数,似乎也是一个挺好的思路呢

点评

话说我想要删掉 SkinSettings ,直接使用 View 里面的常量来设置位置。反正也没打算给每个歌曲一个皮肤,打 SkinSettings 感觉好累的= =  发表于 2015-3-13 18:55
话说你不是想要重构代码吗= = 权限给你了欢迎 push  发表于 2015-3-13 18:52
数组可以理解为数列,也是函数的一种特殊形式。在 Ruby 中都可以通过 [] 来提供参数,所以本质上没有区别。我为了减少计算也用了 Hash 缓存  发表于 2015-3-13 18:49
我现在还傻傻的专门新建一个特效类,以数组的方式一次性算出整个运动过程中每一帧的坐标并在这个特效类update时操作其绑定的精灵……  发表于 2015-3-13 18:43
参数方程里面的t在很多情况下指的是时间,所以比较符合自然认知吧。  发表于 2015-3-13 18:30
RyanBern 发表于 2015-3-13 18:20:17
y=[-(x-x0)y1+(x-x1)y0]/(x0-x1) + a*(x-x0)(x-x1)
典型的抛物线系(过两定点)。
沿着二次曲线运动的脚本让我想到了XP的彩虹神剑。
不过那里应该是采用了这样的方式:
RUBY 代码复制
  1. #=======================================
  2.      # 修改:更新算法,更新弹出
  3.      #=======================================
  4.      if @_damage_duration > 0
  5.        @_damage_duration -= 1
  6.        for damage in @_damage
  7.          damage[0].x = self.x + self.viewport.rect.x -
  8.                        self.ox + self.src_rect.width / 2 +
  9.                        (40 - damage[1]) * damage[3] / 10
  10.          damage[0].y -= damage[4]+damage[1]/10
  11.          damage[0].opacity = damage[1]*20
  12.          damage[1] -= 1
  13.          if damage[1]==0
  14.            damage[0].bitmap.dispose
  15.            damage[0].dispose
  16.            @_damage.delete(damage)
  17.            next
  18.          end
  19.        end
  20.      end

其中@_damage里面存的是若干数组:
[显示伤害的sprite, 伤害持续时间(时间参数), ???(似乎没用到这个参数), 水平飞行速度, 竖直飞行基础速度]
这样算出来也是一个二次曲线(不会往下掉的那种)
黑白界 发表于 2015-3-13 18:11:58
我是来看字的,写的很漂亮
拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-11-6 09:48

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表