事先说明,我的大号已经不在酷丁堂上课了,大号没了,酷丁平台进不去,使用的是本地编译器,与酷丁平台环境略有不同,所以还是需要大家多多测试
目录
1. SDL图形库
2. emscripten api
3. 本地编译
先说SDL图形库
头文件 #include<SDL2/SDL.h>
这方面的内容网上有很多,搜索SDL2就能出来很多
效果应该和cdt.h一样
2. emscripten api
包含了很多和浏览器交互的函数
从前薛乘志讲过一个最著名的函数 emscripten_run_script
实际上这些api有很多,功能比这个更强大
例如emscripten set main loop 就是一个函数,酷丁平台文档里说主循环使用while死循环就会导致页面无响应,这是浏览器事件驱动机制导致的,老师们不会修,就只能让我们自己克服了。我教大家一个方法(本地编译,未在酷丁平台测试)
//原来
while(1) do_something;
//现在
emscripten_set_main_loop([&](){
do_something;
},0,1);
3. 本地编译酷丁平台的程序并不难,下载emscripten就好了,而这个软件在GitHub上,600多MB的东西别想在中国奠信的网络上下顺畅。
我提供了一个链接,无限速,自己搭的服务器
解压后大约1.87GB
进入emsdk文件夹,里面有个emsdk_env.bat不要直接点它,在emsdk文件夹里开个cmd,在cmd里输入emsdk_env.bat,然后输入emcc -v如果显示了emsdk的版本信息,代表安装正确,每次使用emcc都要进入emsdk目录运行一遍emsdk_env.bat
emcc就是将C++程序编译为网页的编译器,用法同minGW
以上为Windows平台下的编译方式
点赞过10教大家如何配置DevC++使用emcc并使用DevC++提供的按钮编译
以下代码可以复制粘贴到酷丁平台看看能不能运行
#include <SDL2/SDL.h>
#include <emscripten.h>
#include <cmath>
#include <vector>
const int SCREEN_WIDTH = 800;
const int SCREEN_HEIGHT = 600;
const int STAR_POINTS = 10;
const double PI = 3.141592653589793;
SDL_Renderer* renderer = nullptr;
double angle = 0.0;
void drawRotatingStar(double cx, double cy, double outerR, double innerR, double angle) {
std::vector<SDL_Point> points;
for (int i = 0; i < STAR_POINTS; ++i) {
double r = (i % 2 == 0) ? outerR : innerR;
double theta = i * 2 * PI / STAR_POINTS + angle;
double x = cx + r * cos(theta);
double y = cy + r * sin(theta);
points.push_back({ static_cast<int>(x), static_cast<int>(y) });
}
points.push_back(points[0]); // close the star
SDL_RenderDrawLines(renderer, points.data(), points.size());
}
void main_loop() {
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255);
SDL_RenderClear(renderer);
SDL_SetRenderDrawColor(renderer, 255, 255, 0, 255);
drawRotatingStar(SCREEN_WIDTH / 2, SCREEN_HEIGHT / 2, 100, 40, angle);
SDL_RenderPresent(renderer);
angle += 0.01;
}
int main() {
SDL_Init(SDL_INIT_VIDEO);
SDL_Window* window = SDL_CreateWindow("Rotating Star", SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, SCREEN_WIDTH, SCREEN_HEIGHT, SDL_WINDOW_SHOWN);
renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED);
emscripten_set_main_loop(main_loop, 0, 1);
return 0;
}
王牌工作室官方在2025-07-22 11:19:02追加了内容
煞笔问答把我代码区的也改了
所有emen改为 emscr去掉ipten 文字不要
script很早之前就被屏蔽了
另:谁在下面给我留个酷丁平台的codingtang.h源文件,我要用SDL给它做实现
