主题:  求:全景360汽车旋转拖拽的算法

东方之猪

职务:普通成员
等级:1
金币:0.0
发贴:79
注册:2001/5/28 16:30:49
#12005/7/21 14:23:49
我有18张图,要做个汽车全景360旋转拖拽的flash效果,那们老大能给个源码,或其算法,谢谢~~



wenkaixia

职务:普通成员
等级:1
金币:0.0
发贴:2
注册:2006/11/10 11:07:35
#22006/11/13 12:00:52
首先,准备好图片。最简便的方法是用数码相机拍摄一组连续的图象。比如在室内固定一个点,以这个点为圆心,架起三角架,拍下周围的影象,如果是360度旋转一周,你需要拍摄12到20张照片。(当然,考虑到数码相机并非一个普及的东西,我们就拿一幅单张的图片来做范例也是无所谓的。)用你最顺手的图象处理软件把这一系列图片拼合成一个整张。我推荐友立的Ulead Cool 360,它使用非常简单。找不到的话就用Photoshop。注意输出图象的时候采取无损失的图象格式,比如用BMP或者是PNG都可以。在FLASH里会对图象做进一步的压缩, 如果一开始就用JPG的话效果可有点惨不忍睹咯。打开Flash软件,别急着导入图象,先把需要的action脚本写好再说。

  步骤一:说明在Flash里旋转图象的工作原理。想起来好象很复杂,其实是很简单的。有两个同样的movie clip都包含着原始图片;用一个隐型按钮来侦测鼠标的动作;再用一个隐型的movie clip提供当前鼠标位置。当观看者拖拽鼠标的时候,隐型按钮根据其按下鼠标当时的x轴的数值产生两个变量,同时告知另一个隐型movie clip开始播放。第二个movie clip把鼠标初始位置和现在位置进行比较,反向转动图片。所以,创建一个名为M.Update的MC,在第一影格里设定Action为stop,第二影格里设定如下:
  Begin Tell Target ("../"
    Set Variable: "cur_x1" = GetProperty("/movie1", _x)
    Set Variable: "cur_x2" = GetProperty("/movie2", _x)
    If (cur_x1 < -3700)
      Set Property ("movie1", X Position) = cur_x2 + 3557
    End If
    If (cur_x2 < -3700)
      Set Property ("movie2", X Position) = cur_x1 + 3557
    End If
    If (cur_x1 > 3700)
      Set Property ("movie1", X Position) = cur_x2 - 3557
    End If
    If (cur_x2 > 3700)
      Set Property ("movie2", X Position) = cur_x1 - 3557
    End If
  End Tell Target
(3557是我所用的图片宽度,你可以把它更换成你所用图片的尺寸。)第三个影格里动作如下:
  Begin Tell Target ("../"
    Set Variable: "x" = GetProperty("/hidden", _x)
    Set Variable: "offset_x" = (start_x - x) / 8
    Set Variable: "cur_x1" = GetProperty("/movie1", _x)
    Set Variable: "cur_x2" = GetProperty("/movie2", _x)
    Set Property ("/movie1", X Position) = cur_x1 + offset_x
    Set Property ("/movie2", X Position) = cur_x2 + offset_x
  End Tell Target
  Go to and Play

  第二步:创建隐型侦测按钮。创建一个叫做Drag的按钮,只在HIT影格里画一个实心圆,因为是隐型的所以不必介意圆的颜色。再创建一个叫做M.Hidden的MC,把按钮导入,并在绘制区域内赋予动作如下(注意不是赋予该关键影格的动作):
  On (Press)
    Begin Tell Target ("../"
      Set Variable: "start_x" = GetProperty("/hidden", _x)
    End Tell Target
    Begin Tell Target ("../update"
      Go to and Play (2)
    End Tell Target
  End On
  On (Release, Release Outside)
    Begin Tell Target ("../update"
      Go to and Stop (1)
    End Tell Target
  End On

  第三步:导入和定位图片:现在导入你处理好的图片到一个MC,把该MC命名为M.main。一定要把图片的左边靠拢Flash 绘图区域的最左边。如果没靠拢的话,待会导出的影片会有一个很模糊的区域。回到主场景,把M.main拖进layer1的第一影格,靠边放好,把它的实体名定为movie1。 再拖拽一个M.main进入相同的地方,随便放在哪里都可以,实体名为movie2。新建图层2,把M.Hidden拖进场景;新建图层3,拖进 M.Update 。在图层 4里,把第一影格上赋予动作如下:
  Start Drag ("/hidden", lockcenter)
  Set Property ("/movie2", X Position) = GetProperty("/movie1", _x) + 3557
  Set Property ("/movie2", Y Position) = GetProperty("/movie1", _y)
  Stop
好了,输出你的全景影片吧,看看效果!