有爱,有技术,有你^_^)y
╱人◕‿‿◕人╲订下契约(注册新用户)

合作站点账号登陆

QQ登录

只需一步,快速开始

快捷导航
查看: 1012|回复: 1
收起左侧

[技巧分享] 【Techne 基础教程】Part 2

[复制链接]

签到天数: 25 天

连续签到: 1 天

[LV.4]偶尔看看III

481

主题

519

好友

15万

积分

最终章

☆非拔作不Ctrl★

积分
159739
发表于 2012-7-30 14:30:37 | 显示全部楼层 |阅读模式

╱人◕‿‿◕人╲定下契约

您需要 登录 才可以下载或查看,没有账号?╱人◕‿‿◕人╲订下契约(注册新用户)

x
本帖最后由 hupanxx 于 2012-7-30 14:42 编辑


第二章 动画

在本章中我们主要研究设置旋转角度(setRotationAngles)以及其他的一些参数。在介绍动画之前我们需要先回忆一下:


[mw_shl_code=java,true]    @Override
    public void render(Entity entity, float var1, float var2, float var3, float var4, float var5, float var6)
    {
        setRotationAngles(var1, var2, var3, var4, var5, var6);
        body.render(var6);
    }

    @Override
    public void setRotationAngles(float var1, float var2, float var3, float var4, float var5, float var6)
    {

    }[/mw_shl_code]

我们假设按照余弦函数的形式进行运动,如图所示:

                               
登录/注册后可看大图


其中,y(X)为在t(x)时的旋转半径。
我们使用小鸡模型 (ModelChicken) 进行举例(可以通过使用ff和mcp进行反编译得到)

[mw_shl_code=java,true]leg0.rotationX = MathHelper.cos(var1 * 0.6662F) * 1.4F * var2;
leg1.rotationX = MathHelper.cos(var1 * 0.6662F + 3.1415927F) * 1.4F * var2;[/mw_shl_code]

设置旋转角度(setRotationAngles)变量

第一自变量和第二自变量
其中第一自变量(var1)用来决定时间、第二自变量(var2)用来决定振幅。可以通过此处修改生物的移动速度,其移动速度越快,腿部的抬高幅度就越高。归纳起来,可以称第一变量为”时间变量(time)“、第二变量为”移动速度变量(walkspeed)“

以下图为例:

                               
登录/注册后可看大图

此时腿部绕X轴旋转满足一下公式:
y(time)=cos(time)*walkspeed
上图则描绘为一个生物处于静止状态并逐渐加速达到最大速度后逐渐减速的过程。

那么该如何进行计算呢?
参考 RenderLiving.render(Entity entity, double var2, double var4, double var6, float var8, float var9):

[mw_shl_code=java,true]float time = mob.field_703_S - mob.field_704_R * (1 - var6);
float walkSpeed = mob.field_705_Q + (mob.field_704_R - mob.field_705_Q) * var6;[/mw_shl_code]

第三自变量
确切地来说第三自变量不好进行命名,因为其根据不同文件有如下三种功能:
  • 狼:尾巴的角度

  • 墨鱼:触须的角度
  • 鸡:翅膀的角度


您只需要做的即是在渲染文件(renderfile)中修改handleRotationFloat即可。

以墨鱼为例:

[mw_shl_code=java,true]protected float handleRotationFloat(EntitySquid entitysquid, float f)
{
  //f == Timer.renderPartialTicks and represents the passed ticks since  the last rendercall (0.0 - 1.0), it gets passed down from runGameLoop() in  Minecraft.java.
  return entitysquid.lastTentacleAngle + (entitysquid.tentacleAngle - entitysquid.lastTentacleAngle) * f;
}[/mw_shl_code]

由于lastTentacleAngle和tentacaleAngle在onLivingUpdate中设置为每秒查询20次,此时需要在两个角度中间的位置确保我们获得了一个较为流畅的动画。

第四和第五变量。
分别描述了旋转的偏转(rotationYaw)以及倾斜(RotationPitch)。


[mw_shl_code=java,true]float rotationYaw = entityliving.prevRotationYaw + (entityliving.rotationYaw - entityliving.prevRotationYaw) * f1;
float rotationPitch = entityliving.prevRotationPitch + (entityliving.rotationPitch - entityliving.prevRotationPitch) * f1;[/mw_shl_code]

在使用这连两个变量时需要对头部绕X轴的旋转(headRotationX)以及绕y轴的旋转(headRotationY)有一个明确的认识。

[mw_shl_code=java,true]head.rotateAngleY = f3 / 57.29578F;
head.rotateAngleX = f4 / 57.29578F;[/mw_shl_code]

其中57.29578为由角度制换算成弧度制的系数(180/pi)。

第六变量
该变量描述的是运动的数值范围,这一变量通常无须理会。


[mw_shl_code=applescript,true]float scale = 1 / 16.0f;[/mw_shl_code]

其中1方块高度为16个像素

小结
决定旋转角度的变量有如下6个:
  • 运动动画的时间
  • 运动动画的速度
  • 那个虽然有用但不知道如何命名的变量
  • 旋转的偏转
  • 旋转的倾斜
  • 数值大小



希望这些信息能够有用~~~

原帖地址:http://www.mcbbs.net/thread-37507-1-1.html

Techne教程总汇帖:https://www.gn00.com/t-88994-1-1.html

补档?不存在的
回复

使用道具 举报

该用户从未签到

388

主题

2042

好友

10万

积分

懒人

积分
104579
发表于 2012-7-31 09:20:02 | 显示全部楼层
@3*把鸡的翅膀变大
签名被小宅喵吞掉了~~~~(>_<)~~~~
回复 支持 反对

使用道具 举报

本版积分规则

小黑屋|手机版|技术宅(基宅) ( 粤ICP备18082987号-1 | 浙公网安备 33010902001746号 )

GMT+8, 2024-4-27 15:25 , Processed in 0.199252 second(s), 13 queries , Redis On.

Copyright © 2018 技术宅社区

Powered by Discuz! X3.5

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