用AS控制MC的倾斜属性的代码

在FLASH里,MC的倾斜属性可以通过手动的办法来设定.在FLASH里,倾斜是实现3D效果的重要方面.
但是AS里头就没有倾斜属性的代码,尽管现在模拟3D的代码已经有很多人做出来,但是目前一般都是局限在坐标点的模拟方面.对于物体,位图的简单3D效果,哪怕就一个倾斜,AS都还没能做到.
为了解决这个问题(这问题,经典里一位用户也曾问过),本人花了近一周的时间来研究:
废话少说,还是转入正题吧.
1一个简单的试验:
在FLASH里,画一个矩形(不要转成元件),然后把该矩形稍作旋转.
接着把转了的矩形在水平方向做一下缩放,你就看到矩行实际上是倾斜了.
因此,利用AS里的_XSCALE和_ROTATION属性就可以让MC动态地倾斜了.

2把该试验应用到AS中
不妨写个代码试试看:
制作一个MC(越复杂可能效果会越明显)
往MC里写代码:
onClipEvent(enterFrame){
  _rotation=30;
  _xscale=30;
}
测试一下,没有倾斜效果,仔细看一下会发现在MC旋转以后,缩放的坐标也跟着旋转.
可惜啊!
难道就没有办法了吗?答案是否定的!
既然MC旋转以后,缩放坐标跟着旋转,那么,我们就把旋转了的MC再转为MC,那么不就有两个坐标系了吗?不就可以达到小测试的效果吗?
笔者也许比较笨,这个小问题也给卡住了3分钟.
言归正传,我们继续说吧.
把刚才的MC的代码清空,命名为myMC,然后把他转换为影片剪辑.
往转换了的影片剪辑输入代码:
onClipEvent(load){
   myMC._rotation=30
  _xscale=30
}
再测试一下,倾斜效果出来了!
笔者以为这样就可以大功告成,想自己动态设置MC倾斜30度,却发现,上述的代码虽然是倾斜了,但是倾斜并不是30度,上面两个属性跟倾斜属性还存在着对笔者来说是比较复杂的数学关系.
笔者花了近一周的时间研究这种关系,尽管有点晕,但最终还是给弄出来了.
把上面的代码替换为:
onClipEvent (load) {
       function setSkewx(anglex) {
              var angx = anglex%360;
              var tx = 1/Math.tan(angx*(Math.PI/180));
              var alfax = (Math.tan(angx*(Math.PI/180)) == 0) ? Math.PI/2 : (Math.asin((Math.sqrt(tx*tx+1)-1)/tx));
              myMC._rotation = -45;
              _xscale = 100*Math.sin(alfax);
              myMC._xscale = 100/Math.sqrt(1/2*(Math.pow(Math.sin(alfax), 2)+1));
              myMC._yscale = 100/Math.sqrt(1/2*(Math.pow(Math.sin(alfax), 2)+1));
              _rotation = Math.atan(1/Math.sin(alfax))/(Math.PI/180);
              if (Math.cos(angx*(Math.PI/180))<0) {
                     myMC._yscale *= -1;
              }
       }
       function setSkew(anglex, angley) {
              setSkewx(anglex-angley);
              _rotation += angley;
       }
}
onClipEvent (enterFrame) {
       an = (an+1)%360;
       setSkew(an,0)
}
就看到效果了.
从前面的简单测试,到写成这段代码,可谓艰辛至极.但不管怎样也好,代码写成了,也希望能让大家从中学到一些东西.
至于从简单的测试代码到上面的代码是怎么推出来的,里头的语句意义何在,我将在这段时间给大家作出解释.

(0)

相关推荐

  • 用AS控制MC的倾斜属性的代码

    在FLASH里,MC的倾斜属性可以通过手动的办法来设定.在FLASH里,倾斜是实现3D效果的重要方面. 但是AS里头就没有倾斜属性的代码,尽管现在模拟3D的代码已经有很多人做出来,但是目前一般都是局限在坐标点的模拟方面.对于物体,位图的简单3D效果,哪怕就一个倾斜,AS都还没能做到. 为了解决这个问题(这问题,经典里一位用户也曾问过),本人花了近一周的时间来研究: 废话少说,还是转入正题吧. 1一个简单的试验: 在FLASH里,画一个矩形(不要转成元件),然后把该矩形稍作旋转. 接着把转了的矩形

  • 用javascript来控制 链接的target 属性的代码

    在HTML 4.0 Strict和XHTML 1.0 STRICT里不允许在<a>标签里使用target属性,这是一件令网页设计者懊恼的事.在过渡的规范里还是允许使用的.但通过一定的方法,我们可以解决这一问题. HTMl4.0规范里拿掉了target属性.但它添加了另外一个属性:rel.这个属性是用来指定包含链接的文档和所链接文档之间的关系的.规范里定义了其属性值(如:next,previous,chapter,section),在这些属性里大多数是用来定义一个大文档里各个小部分之间的关系的.

  • javascript控制Div层透明属性由浅变深由深变浅逐渐显示

    搬运的留着以后自己看! 复制下面蓝色的代码保存为html格式的文件,使用网页浏览器浏览效果 代码支持IE6.7.8/firefox/Chrome浏览器 复制代码 代码如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="

  • Python的代理类实现,控制访问和修改属性的权限你都了解吗

    目录 本篇文章主要内容 代理类的一个简单的实现方式示例 一个实现日志输出的代理类的简化示例 总结 本篇文章主要内容 代理类主要功能是将一个类实例的属性访问和控制代理到代码内部另外一个实例类,将想对外公布的属性的访问和控制权交给代理类来操作,保留不想对外公布的属性的访问或控制权,比如只读访问,日志功能 1.代理类实现被代理类的属性访问和修改权限控制 2.异常捕获代理类的简化示例 代理类的一个简单的实现方式示例 目标:实现类Product的实例属性让另一个类Proxy来代理访问和控制,想将对外公布的

  • python 打印出所有的对象/模块的属性(实例代码)

    实例如下: import sys def print_all(module_): modulelist = dir(module_) length = len(modulelist) for i in range(0,length,1): print getattr(module_,modulelist[i]) print_all(sys) 以上这篇python 打印出所有的对象/模块的属性(实例代码)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • JavaScript中访问id对象 属性的方式访问属性(实例代码)

    实例如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Co

  • 用JavaScript修改CSS属性的代码

    用JavaScript修改CSS属性 只有写原生的javascript了. 1.用JS修改标签的 class 属性值: class 属性是在标签上引用样式表的方法之一,它的值是一个样式表的选择符,如果改变了 class 属性的值,标签所引用的样式表也就更换了,所以这属于第一种修改方法. 更改一个标签的 class 属性的代码是: document.getElementById( id ).className = 字符串; document.getElementById( id ) 用于获取标签对

  • JS switch判断 三目运算 while 及 属性操作代码

    三 目运算:如var a = 10: var b= 12: c = a>b ?a:b; 若成立执行a否则执行b var isHide = true; 若用if判断语句如下 if(isHide) { box.style.display = "block"; } else { box.style.display = "none"; } 三目运算替代if box.style.display = isHide?"block":"none&

  • Spring中利用配置文件和@value注入属性值代码详解

    1 简单属性值注入 package com.xy.test1; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @Service // 需要被注入属性值的类需要被Spring管理 public class PropertiesService1 { // 利用@Value注解,即使没有该属性或者属性文件也不会报错 // @Value输入

  • Python实现控制台中的进度条功能代码

    进度条最主要的问题就是所有字符全部在同一行,而且可以修改. 然而当执行print语句的时候,python会在打印完这个语句的同时在结尾加上'\n',也就是换行,这就导致在控制台下一旦被print之后就无法再修改了.所以我们现在的输出就不能再使用print来完成了. 我们要使用的是来自sys库的sys.stdout.write()函数,这个函数会在控制台输出这个字符串的同时不加上任何结尾,这就意味着这个输出还没有完全结束.通过sys.stdout.flush()函数可以把输出暂时打印在控制台中(造

随机推荐