EasyX實現(xiàn)自由落體小球
本文實例為大家分享了EasyX實現(xiàn)自由落體小球的具體代碼,供大家參考,具體內(nèi)容如下
1. 要實現(xiàn)自由落體,首先得實現(xiàn)勻速下落
#include<graphics.h> ? ?//圖形庫頭文件 #include<conio.h> #include<cstdio> #define WIDTH 400 ? //窗口寬度 #define HEIGHT 600 ? //窗口高度 int main() { ?? ?//定義并初始化小球坐標 ?? ?float ballX = WIDTH / 2; ?? ?float ballY = 10; ?? ?//創(chuàng)建窗口 ?? ?initgraph(WIDTH, HEIGHT); ?? ?while (1) ?? ?{ ?? ??? ?ballY++; ? ? ? ?//改變小球的y坐標 ?? ??? ?cleardevice(); ?//清屏 ?? ??? ?fillcircle(ballX, ballY, 10); ?//繪制小球 ?? ??? ?Sleep(10); ? ? ? ? ? ?//暫停10毫秒 ?? ?} ?? ?_getch(); ? ? ? ? //等待按鍵輸入(卡屏作用) ?? ?closegraph(); ? ? ?//關(guān)閉窗口 ?? ?return 0; }
2.然后在勻速的基礎(chǔ)上實現(xiàn)加速運動
(只需要實現(xiàn)y方向的增量不斷改變即可)
#include<graphics.h> #include<conio.h> #include<cstdio> #define WIDTH 400 ? //窗口寬度 #define HEIGHT 600 ? //窗口高度 int main() { ?? ?//定義并初始化小球坐標 ?? ?float ballX = WIDTH / 2; ?? ?float ballY = 10; ?? ?//定義小球初始下落速度 ?? ?float vy = 0.0; ?? ?//定義小球下落加速度 ?? ?float g = 0.5; ? ? ? //y方向的增量 ?? ?//創(chuàng)建窗口 ?? ?initgraph(WIDTH, HEIGHT); ?? ?while (1) ?? ?{ ?? ??? ?//實現(xiàn)加速下落 ?? ??? ?//改變下落速度 ?? ??? ?vy = vy + g; ?? ??? ?//改變Y方向坐標 ?? ??? ?ballY = ballY + vy; ?? ??? ?//做反彈處理 ?? ??? ?if (ballY >= 590) ?? ??? ??? ?vy = -0.95*vy; ? //改變vy的方向,加一點阻力 ?? ??? ?//做下邊界處理 ?? ??? ?if (ballY > 590) ?? ??? ??? ?ballY = 590; ?? ??? ?cleardevice(); ?//清屏 ?? ??? ?fillcircle(ballX, ballY, 10); ?//繪制小球 ?? ??? ?Sleep(100); ? ? ? ? ? ?//暫停100毫秒 ?? ?} ?? ?_getch(); ?? ?closegraph(); ?? ?return 0; }
要點一: 通過增量改變每一次 y 方向上值改變的不同
要點二: 下邊界處理, 當 y >窗口高度 - 小球半徑 時需要將 y 坐標置為 窗口高度 - 小球半徑
要點三: vy的反向
以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
C++中rapidjson將map轉(zhuǎn)為json的方法
今天小編就為大家分享一篇關(guān)于C++中rapidjson將map轉(zhuǎn)為json的方法,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-04-04C++類繼承之子類調(diào)用父類的構(gòu)造函數(shù)的實例詳解
這篇文章主要介紹了C++類繼承之子類調(diào)用父類的構(gòu)造函數(shù)的實例詳解的相關(guān)資料,希望通過本文大家能夠掌握C++類繼承的相關(guān)知識,需要的朋友可以參考下2017-09-09C++ 中l(wèi)ambda表達式的編譯器實現(xiàn)原理
C++ 11加入了一個非常重要的特性——Lambda表達式。這篇文章主要介紹了C++ 中l(wèi)ambda表達式的編譯器實現(xiàn)原理,需要的朋友可以參考下2017-02-02