as实现小球做圆周运动

 之前面试过两家公司的flex程序员,都碰到同一个笔试题,可是学术不精呀,没有做出来,最近有时间就研究了一下,好心的同事帮忙在网上找到一个例子,非常感谢他.现在把代码贴在这里,怕自己忘记.呵呵......

新建一个as3工程,在工程下面新建一个名为aa的as类文件,代码如下:

package
{
 import flash.display.Sprite;
 import flash.events.Event;
 import flash.events.MouseEvent;
 import flash.text.TextField;

 [SWF(width="600", height="600", backgroundColor="#ffffff", frameRate="30")]
 public class aa extends Sprite
 {
  private var round:Sprite=new Sprite;
  private var start:TextField=new TextField;
  private var cancle:TextField=new TextField;
  private var pause:TextField=new TextField;

  private var t:Number=0;
  private var r:int=100;

  public function aa()
  {
   round.graphics.beginFill(0xFF00000);
   round.graphics.drawCircle(150, 300, 5);
   addChild(round);

   start.text="start";
   start.x=490;
   start.y=570;
   start.addEventListener(MouseEvent.CLICK, startFun);
   addChild(start);

   cancle.text="cancle";
   cancle.x=530;
   cancle.y=570;
   cancle.addEventListener(MouseEvent.CLICK, cancleFun);
   addChild(cancle);

   pause.text="pause";
   pause.x=570;
   pause.y=570;
   pause.addEventListener(MouseEvent.CLICK, pauseFun);
   addChild(pause);
  }

  private function startFun(event:MouseEvent):void
  {
   round.addEventListener(Event.ENTER_FRAME, move);
  }

  private function cancleFun(event:MouseEvent):void
  {
   round.removeEventListener(Event.ENTER_FRAME, move);
   t=0;
   round.x=0;
   round.y=0;
  }

  private function pauseFun(event:MouseEvent):void
  {
   round.removeEventListener(Event.ENTER_FRAME, move);
  }

  private function move(event:Event):void
  {
   round.x=(r - r * Math.cos((t++) * Math.PI / 180));
   round.y=(r * Math.sin((t++) * Math.PI / 180));
  }
 }
}

写好后运行就OK了,

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是OpenGL实现实心小球沿着圆周均速运动的代码示例: ```c++ #include <GL/glut.h> #include <math.h> // 小球的半径 #define RADIUS 0.2f // 圆心坐标 #define CENTER_X 0.0f #define CENTER_Y 0.0f // 圆的半径 #define CIRCLE_RADIUS 2.0f // 周期 #define PERIOD 5.0f // 小球的位置 GLfloat ball_x = 0.0f; GLfloat ball_y = 0.0f; // 计算小球的位置 void update(int value) { // 计算当前时间 GLfloat time = glutGet(GLUT_ELAPSED_TIME) / 1000.0f; // 计算小球在圆周上的角度 GLfloat angle = 2.0f * M_PI * time / PERIOD; // 计算小球的位置 ball_x = CENTER_X + CIRCLE_RADIUS * cos(angle); ball_y = CENTER_Y + CIRCLE_RADIUS * sin(angle); // 更新窗口 glutPostRedisplay(); // 设置下一次更新的时间 glutTimerFunc(16, update, 0); } // 初始化函数 void init() { // 设置背景颜色为白色 glClearColor(1.0f, 1.0f, 1.0f, 1.0f); } // 绘制函数 void draw() { // 清空屏幕 glClear(GL_COLOR_BUFFER_BIT); // 绘制圆 glBegin(GL_LINE_LOOP); for (int i = 0; i < 360; i++) { GLfloat angle = 2.0f * M_PI * i / 360.0f; GLfloat x = CENTER_X + CIRCLE_RADIUS * cos(angle); GLfloat y = CENTER_Y + CIRCLE_RADIUS * sin(angle); glVertex2f(x, y); } glEnd(); // 绘制小球 glPushMatrix(); glTranslatef(ball_x, ball_y, 0.0f); glBegin(GL_TRIANGLE_FAN); glColor3f(1.0f, 0.0f, 0.0f); glVertex2f(0.0f, 0.0f); for (int i = 0; i <= 360; i++) { GLfloat angle = 2.0f * M_PI * i / 360.0f; GLfloat x = RADIUS * cos(angle); GLfloat y = RADIUS * sin(angle); glVertex2f(x, y); } glEnd(); glPopMatrix(); // 刷新缓冲区 glutSwapBuffers(); } // 主函数 int main(int argc, char** argv) { // 初始化GLUT glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(500, 500); glutCreateWindow("Circle Motion"); // 设置绘制函数和更新函数 glutDisplayFunc(draw); glutTimerFunc(0, update, 0); // 初始化OpenGL init(); // 进入主循环 glutMainLoop(); return 0; } ``` 运行该程序可以看到一个实心小球沿着圆周均速运动的动画效果。可以通过修改`CIRCLE_RADIUS`和`PERIOD`来改变圆形的半径和小球的运动周期。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值