EASYX动画效果实现

eg1:绘制小球的动画效果

  • 通过一下的代码实现小球从左向右移动效果,计算小球的移动速度和帧率实现移动效果平和造成视觉上的错觉
#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

int main()
{
    // 编写动画的效果
    initgraph(800, 600);
    setorigin(400, 300);;
    setaspectratio(1, -1);
    // 创建动画背景
    setbkcolor(RGB(164, 225, 202));
    // 清除原来的背景颜色,换上我们给定的背景颜色
    cleardevice();
    // 设置填充的颜色为白色
    setfillcolor(WHITE);
    // 绘制出圆在每一个时刻的静态画面
    int x = 0;
    int y = 0;
    for (x = -400; x <= 400; x += 5) {
        // 清除之前绘制的画面
        cleardevice();
        solidcircle(x, y, 50);
        // sleep()函数起到的作用是休眠
        Sleep(40);
    }
    // 延时
    getchar();
    closegraph();
    return 0;
}

eg2:实现五角星往返运动

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

// 绘制五角星的函数,参数radius表示的是五角星外切圆的半径,参数startAngle是五角星的起始角度x, y 表示移动五角星的坐标
void fivePointedStar(int x,int y ,int radius, double startAngle) {
    double delta = 2 * PI / 5;
    POINT points[5];
    // 循环5次
    for (int i = 0; i < 5; i++) {
        // 使用三角函数计算出如何绘画五角星和五角星绘画的位置
        points[i].x = cos(startAngle + i * delta * 2) * radius + x;
        points[i].y = sin(startAngle + i * delta * 2) * radius + y;
    }
    solidpolygon(points, 5);
}

int main()
{
    // 编写动画的效果
    initgraph(800, 600);
    setorigin(400, 300);;
    setaspectratio(1, -1);
    // 创建动画背景
    setbkcolor(RGB(164, 225, 202));
    // 清除原来的背景颜色,换上我们给定的背景颜色
    cleardevice();
    // 设置填充的颜色为白色
    setfillcolor(WHITE);
    // 指定多边形的填充模式为winding
    setpolyfillmode(WINDING);
    // 绘制出圆在每一个时刻的静态画面
    int x = 0;
    int y = 0;
    int dx = 5;
    while (1) {
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        Sleep(40);

        x = x + dx;
        if (x == -400 || x == 400) {
            dx = -dx;
        }
    }
    for (x = -400; x <= 400; x += 5) {
        // 清除之前绘制的画面
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
    }
    // 延时
    getchar();
    closegraph();
    return 0;

}

在这里插入图片描述
eg3:实现五角星实现矩形运动

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

// 绘制五角星的函数,参数radius表示的是五角星外切圆的半径,参数startAngle是五角星的起始角度x, y 表示移动五角星的坐标
void fivePointedStar(int x,int y ,int radius, double startAngle) {
    double delta = 2 * PI / 5;
    POINT points[5];
    // 循环5次
    for (int i = 0; i < 5; i++) {
        // 使用三角函数计算出如何绘画五角星和五角星绘画的位置
        points[i].x = cos(startAngle + i * delta * 2) * radius + x;
        points[i].y = sin(startAngle + i * delta * 2) * radius + y;
    }
    solidpolygon(points, 5);
}

int main()
{
    // 编写动画的效果
    initgraph(800, 600);
    setorigin(400, 300);;
    setaspectratio(1, -1);
    // 创建动画背景
    setbkcolor(RGB(164, 225, 202));
    // 清除原来的背景颜色,换上我们给定的背景颜色
    cleardevice();
    // 设置填充的颜色为白色
    setfillcolor(WHITE);
    // 指定多边形的填充模式为winding
    setpolyfillmode(WINDING);
    int x = -300;
    int y = 200;
    int dx, dy;
    while (1) {
        if (x == -300 && y == 200) {
            dx = 5;
            dy = 0;
        }
        else if (x == 300 && y == 200) {
            dx = 0;
            dy = -5;
        }
        else if (x == 300 && y == -200) {
            dx = -5;
            dy = 0;
        }
        else if (x == -300 && y == -200) {
            dx = 0;
            dy = 5;
        }
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
        x = x + dx;
        y = y + dy;
    }
     

    for (x = -400; x <= 400; x += 5) {
        // 清除之前绘制的画面
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
    }
    // 延时
    getchar();
    closegraph();
    return 0;

}

在这里插入图片描述
eg4:让五角星实现圆周运动
在这里插入图片描述

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

// 绘制五角星的函数,参数radius表示的是五角星外切圆的半径,参数startAngle是五角星的起始角度x, y 表示移动五角星的坐标
void fivePointedStar(int x,int y ,int radius, double startAngle) {
    double delta = 2 * PI / 5;
    POINT points[5];
    // 循环5次
    for (int i = 0; i < 5; i++) {
        // 使用三角函数计算出如何绘画五角星和五角星绘画的位置
        points[i].x = cos(startAngle + i * delta * 2) * radius + x;
        points[i].y = sin(startAngle + i * delta * 2) * radius + y;
    }
    solidpolygon(points, 5);
}

int main()
{
    // 编写动画的效果
    initgraph(800, 600);
    setorigin(400, 300);;
    setaspectratio(1, -1);
    // 创建动画背景
    setbkcolor(RGB(164, 225, 202));
    // 清除原来的背景颜色,换上我们给定的背景颜色
    cleardevice();
    // 设置填充的颜色为白色
    setfillcolor(WHITE);
    // 指定多边形的填充模式为winding
    setpolyfillmode(WINDING);
    int x, y;
    int r = 200;
    double theta = 0;
    double dTheta = 0.05;
    while (1) {
        x = cos(theta) * r;
        y = sin(theta) * r;
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
        theta = theta + dTheta;
    }
     

    for (x = -400; x <= 400; x += 5) {
        // 清除之前绘制的画面
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
    }
    // 延时
    getchar();
    closegraph();
    return 0;

}

在这里插入图片描述
eg5:实现动画的自传移动效果

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#define PI 3.14
// 1PI = 180度 2PI = 360度

// 绘制五角星的函数,参数radius表示的是五角星外切圆的半径,参数startAngle是五角星的起始角度x, y 表示移动五角星的坐标
void fivePointedStar(int x,int y ,int radius, double startAngle) {
    double delta = 2 * PI / 5;
    POINT points[5];
    // 循环5次
    for (int i = 0; i < 5; i++) {
        // 使用三角函数计算出如何绘画五角星和五角星绘画的位置
        points[i].x = cos(startAngle + i * delta * 2) * radius + x;
        points[i].y = sin(startAngle + i * delta * 2) * radius + y;
    }
    solidpolygon(points, 5);
}

int main()
{
    // 编写动画的效果
    initgraph(800, 600);
    setorigin(400, 300);;
    setaspectratio(1, -1);
    // 创建动画背景
    setbkcolor(RGB(164, 225, 202));
    // 清除原来的背景颜色,换上我们给定的背景颜色
    cleardevice();
    // 设置填充的颜色为白色
    setfillcolor(WHITE);
    // 指定多边形的填充模式为winding
    setpolyfillmode(WINDING);
    int x, y;
    int r = 200;

    double theta = 0;
    double dTheta = 0.05;
    
    double startAngle = PI / 2;
    double dStartAngle = 0.05;
    while (1) {
    
        x = cos(theta) * r;
        y = sin(theta) * r;
    
        cleardevice();
        fivePointedStar(x, y, 50, startAngle);
        Sleep(40);
    
        theta = theta + dTheta;
        startAngle = startAngle + dStartAngle;
    }
     
    for (x = -400; x <= 400; x += 5) {
        // 清除之前绘制的画面
        cleardevice();
        fivePointedStar(x, y, 50, PI / 2);
        // sleep()函数起到的作用是休眠
        Sleep(40);
    }
    // 延时
    getchar();
    closegraph();
    return 0;

}

在这里插入图片描述eg6:EASYX实现直线运动

#include <stdio.h>
#include <easyx.h>
#include <iostream>
#include <math.h>
#include <conio.h>
#define PI 3.14
// 函数的封装,前两个参数为起始点xy的坐标, 中间的两个参数为终止点的xy坐标,最后的一个参数为速度的大小单位为px没帧
void LinearMotion(int x1, int y1, int x2, int y2, int v) {
    // 使用tan 和arctan计算出角度
    double tanTheta = (double)abs(y2 - y1) / (double)abs(x2 - x1);
    double theta = atan(tanTheta);
    // 使用三角函数计算出速度分量vx和vy
    double vy = sin(theta) * v;
    double vx = cos(theta) * v;
    // 根据速度方向的正负求得速度分量的符号用变量vxFlag和变量vyFlag进行保存
    int vxFlag = 0;
    int vyFlag = 0;
    if (x2 - x1 > 0) {
        vxFlag = 1;
    }
    else if (x2 - x1 < 0) {
        vxFlag = -1;
    }if (y2 - y1 > 0) {
        vyFlag = 1;
    }
    else if (y2 - y1 < 0) {
        vyFlag = -1;
    }
    vx = vx * vxFlag;
    vy = vy * vyFlag;
    // 圆心的坐标
    double x, y;
    x = x1;
    y = y1;
    while (1) {
        cleardevice();
        solidcircle(x, y, 25);
        Sleep(40);
        x += vx;
        y += vy;
        if (vxFlag == 1) {
            if (x >= x2) {
                break;
            }
        }
        else if (vxFlag == -1) {
            if (x <= x2) {
                break;
            }
        }if (vyFlag == 1) {
            if (y >= y2) {
                break;
            }
        }
        else if (vyFlag == -1) {
            if (y <= y2) {
                break;
            }
        }

    }

}



int main()
{
    // EASYX实现直线运动
    initgraph(800, 600);
    setorigin(400, 300);
    setaspectratio(1, -1);
    setbkcolor(RGB(164, 225, 202));
    cleardevice();
    

    //函数调用
    LinearMotion(-200, -200, 0, 200, 5);
    LinearMotion(-0, 200, 200, -200, 5);


    getchar();
    closegraph();
    return 0;


}

在这里插入图片描述

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 垂直跳跃动作可以通过easyxC++中的键盘事件和定时器事件实现。下面是一个简单的示例代码: ``` #include <graphics.h> #include <conio.h> int main() { initgraph(640, 480); // 初始化图形窗口 int x = 320, y = 400; // 初始位置为屏幕中央 int vy = 0; // 初始竖直速度为0 int g = 1; // 重力加速度为1 int jumpSpeed = -15; // 跳跃速度为-15 int jumpHeight = 100; // 跳跃高度为100 bool jumping = false; // 是否跳跃标志位 while (!kbhit()) // 循环直到有键盘输入 { cleardevice(); // 清空屏幕 // 更新竖直速度 if (jumping) { vy += g; } // 更新位置 y += vy; // 绘制角色 setfillcolor(BLUE); fillcircle(x, y, 10); // 判断是否到达地面或跳跃高度 if (y >= 400) { y = 400; vy = 0; jumping = false; } else if (y <= 400 - jumpHeight) { jumping = false; } // 监听键盘事件 if (GetAsyncKeyState(VK_SPACE) && !jumping) { vy = jumpSpeed; jumping = true; } Sleep(10); // 等待10毫秒,降低CPU占用率 } closegraph(); // 关闭图形窗口 return 0; } ``` 在这个示例中,我们使用了一个循环来不断更新角色的位置和竖直速度。当角色到达地面时,竖直速度归零,并且将跳跃标志位设置为false;当角色到达跳跃高度时,跳跃结束。我们还监听了键盘事件,在用户按下空格键时触发跳跃动作。 你可以根据自己的需要修改代码中的一些参数,例如角色的起始位置、跳跃速度和跳跃高度等。 ### 回答2: 在基于easyxC的垂直跳跃动作实现中,我们首先需要定义一个角色对象并将其放置在初始位置。然后,我们可以使用easyxC中的相关函数来实现跳跃动作。 我们可以通过设置角色对象的初始垂直速度和重力加速度来模拟跳跃行为。当角色对象执行跳跃动作时,我们可以使用循环语句来实现角色对象的垂直移动,并在每次循环中更新角色对象的位置和速度。 具体实现中,可以使用`initgraph`函数来创建绘图窗口,并使用`IMAGE`结构体来加载和显示角色对象的图像。然后,可以使用`getfps`函数来获取屏幕刷新率,并在每次循环中使用`Sleep`函数来控制跳跃动作的速度。 在循环中,我们可以使用`kbhit`函数来检测键盘输入,当用户按下跳跃键时,我们可以增加角色对象的垂直速度来触发跳跃动作。在每个循环迭代中,我们需要更新角色对象的位置和速度,并检测角色对象是否触地。如果角色对象触地,则将垂直速度重置为0,完成一次跳跃动作。 另外,我们还可以添加地面碰撞检测,以避免角色对象在下落过程中穿过地面。通过检测角色对象与地面对象的碰撞,我们可以在跳跃过程中确保角色对象能够正确地与地面进行交互。 通过以上方式,结合easyxC中提供的函数和方法,我们可以实现基于easyxC的垂直跳跃动作。这样,我们就可以使用easyxC来开发各种有趣的游戏或动画,添加更加生动和多样化的交互体验。 ### 回答3: easyxC 是一种用于实现图形化编程的软件开发工具,可以构建游戏、动画和交互式应用程序。要实现垂直跳跃动作,可以按照以下步骤进行: 1. 创建角色:首先,我们需要创建一个角色或者对象来代表游戏中的主要角色。在 easyxC 中,可以使用“创建角色”或者“创建对象”的功能来实现。我们可以选择一个合适的形状和外观来创建角色,如一个小人物或者小动物。 2. 定义跳跃动作:在角色创建好之后,我们需要定义垂直跳跃的动作。在 easyxC 中,可以使用“动画编辑器”或者编程方式来实现。我们可以定义跳跃过程中的关键帧和动作流程,如起跳、上升、下降和着陆等。 3. 添加控制:为了实现跳跃动作的交互性,我们需要添加一些控制方式。在 easyxC 中,可以使用键盘按键、鼠标点击或者触摸屏操作等方式来控制角色的跳跃动作。我们可以为相应的控制方式添加事件处理函数,当发生相应的操作时,角色执行跳跃动作。 4. 设置物理效果:为了使垂直跳跃动作更加真实,可以通过添加物理效果来模拟重力和碰撞。在 easyxC 中,可以使用物理引擎来实现这些效果。我们可以设置角色的重力和碰撞属性,使得角色在跳跃过程中遵循物理规律。 5. 调试和优化:在实现垂直跳跃动作之后,我们需要对程序进行调试和优化,确保动作的流畅性和正确性。在 easyxC 中,可以使用调试工具来检查和修复可能存在的错误或者问题。 通过以上步骤,基于 easyxC 可以实现具有垂直跳跃动作的游戏或者动画。具体实现的方式和细节可能会根据实际需求和个人技术水平而有所不同,但以上是一个基本的思路。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值