当前位置学海荡舟 -> 电脑乐园 -> Flash实例



19.反弹球

预览成品:两个小球在画面里以直行方式移动着,一旦碰到画面的边界就会反弹90度,往另一个方向继续直行移动,就象是一个小皮球在密闭的房间里不断弹跳一般。

下载源程序


逐步说明:
  1)新增影片片段ball1和ball2,并把它们拖动到工作区中的适当位置。最后建立程序如图所示:

总体程序

  background层上放的是场景的背景,ball层中放的是影片片段ball1和ball2(左上角的球体为ball1,右上角的球体为ball2),action层是控制层。下面我们详细分析action层是怎么控制球体运动的。
  2)第1个影帧设定的Actions为:

初始化变量

  这里定义了四个变量,也就是每次所要移动的“X”距离和“Y”距离。
  第2个影帧设定的Actions为:

第2个控制影帧的Actions

  Set Variable: "x1" = GetProperty ("/ball1",_x )
  Set Variable: "y1" = GetProperty ("/ball1",_y )
  If (x1 >= 340)
   Set Variable: "move_x1" = -(move_x1)
  Else If (x1<=10)
   Set Variable: "move_x1" = -(move_x1)
  End If
  If (y1 >= 190)
   Set Variable: "move_y1" = -(move_y1)
  Else If (y1<=10)
   Set Variable: "move_y1" = -(move_y1)
  End If
  Set Variable: "x2" = GetProperty ("/ball2",_x )
  Set Variable: "y2" = GetProperty ("/ball2",_y )
  If (x2 >= 340)
   Set Variable: "move_x2" = -(move_x2)
  Else If (x2<=10)
   Set Variable: "move_x2" = -(move_x2)
  End If
  If (y2 >= 190)
   Set Variable: "move_y2" = -(move_y2)
  Else If (y2<=10)
   Set Variable: "move_y2" = -(move_y2)
  End If

  这里先取得两个小球目前的“X”位置和“Y”位置(ball1为:x1,y1;ball2为:x2,y2),然后分别对两个小球执行两个If判断。如果X大于等于340(表示球已经到了画面右边的边界),就将变量要移动的“X”距离由正值转为负值,如果X小于等于10(表示球已经到了画面左边的边界),就将变量要移动的“X”距离由负值转为正值。如果Y大于等于190(表示球已经到了画面下方的边界),就将变量要移动的“Y”距离由正值转为负值,如果Y小于等于10(表示球已经到了画面上方的边界),就将变量要移动的“Y”距离由负值转为正值。
  第3个影帧设定球体新的“X位置”及“Y位置”,即为目前的“X位置”及“Y位置”,加上变量移动的“X距离”及“Y距离”,然后跳回第2个影帧。

第3个控制影帧的Actions

  Set Property ("/ball1", X Position) = x1-move_x1
  Set Property ("/ball1", Y Position) = y1-move_y1
  Set Property ("/ball2", X Position) = x2-move_x2
  Set Property ("/ball2", Y Position) = y2-move_y2
  Go to and Play (2)


上一实例(星风)  下一实例(一个有声有色的按钮)