问题标题: 酷丁平台新玩法

1
0
已解决
王牌工作室官方
王牌工作室官方
新手光能
新手光能

事先说明,我的大号已经不在酷丁堂上课了,大号没了,酷丁平台进不去,使用的是本地编译器,与酷丁平台环境略有不同,所以还是需要大家多多测试

目录

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的东西别想在中国奠信的网络上下顺畅。

我提供了一个链接,无限速,自己搭的服务器

emsdk.7z (352.19MB)

解压后大约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给它做实现


1
已采纳
倪雨泽
倪雨泽
资深光能
资深光能

你要的源文件

https://yuze-file.netlify.app/files/codingtang.h

0
0
李子墨
李子墨
新手天翼
新手天翼

太强大了!

我怀疑老师要不要让你维修酷丁平台

0
倪雨泽
倪雨泽
资深光能
资深光能

进去之后右键另存为即可

我要回答