网页资讯视频图片知道文库贴吧地图采购
进入贴吧全吧搜索

 
 
 
日一二三四五六
       
       
       
       
       
       

签到排名:今日本吧第个签到,

本吧因你更精彩,明天继续来努力!

本吧签到人数:0

一键签到
成为超级会员,使用一键签到
一键签到
本月漏签0次!
0
成为超级会员,赠送8张补签卡
如何使用?
点击日历上漏签日期,即可进行补签。
连续签到:天  累计签到:天
0
超级会员单次开通12个月以上,赠送连续签到卡3张
使用连续签到卡
05月14日漏签0天
c4droid吧 关注:42,833贴子:262,822
  • 看贴

  • 图片

  • 吧主推荐

  • 游戏

  • 17回复贴,共1页
<<返回c4droid吧
>0< 加载中...

SDL2 求助 运行一会儿就卡住了

  • 只看楼主
  • 收藏

  • 回复
  • be148TTN
  • 外星人
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
//代码如下
#include "SDL2/SDL.h"
#include "SDL2/SDL_thread.h"
#include <math.h>
#include <conio.h>
SDL_Color color = { 178, 34, 34 };//
SDL_Surface *sur1 = NULL; //定义刷屏表面
SDL_Surface *sur2 = NULL;
SDL_Surface *sur3 = NULL;
SDL_Window *win = NULL;
SDL_Renderer *ren = NULL;
SDL_Texture *tex1 = NULL;
SDL_Texture *tex2 = NULL;
SDL_Texture *wall = NULL;
SDL_Thread *thd;
SDL_Rect p,wl;
SDL_Event event;
int W,H;
int dx,dy;
int bl;
int speed = 3;
int getTouch(void*data)
{
while (1)
{
while (SDL_PollEvent(&event))
{
usleep(2000);
if (event.type == SDL_FINGERMOTION)
//当事件为触屏
{
dx = event.tfinger.dx * W;
dy = event.tfinger.dy * H;
while(abs(dx) > speed)
{
if(dx > 0)
dx -=1;
else
dx +=1;
}
while(abs(dy) > speed)
{
if(dy > 0)
dy -=1;
else
dx += 1;
}
p.x += dx;
p.y += dy;
//滑动移动并限速
}
}
if(p.x < 0)
p.x = 0;
else if(p.x > W - bl)
p.x = W - bl;
if(p.y < 0)
p.y = 0;
else if(p.y > H - bl)
p.y = H - bl;
//边界检测
if(p.y + p.h > wl.y && p.y < wl.y + wl.h)
{
if(abs(p.x + p.w - wl.x) < 3)
p.x = wl.x - p.w - speed;
else if(abs(p.x - wl.x - wl.w) < speed)
p.x = wl.x + wl.w + speed;
}
else if(p.x + p.w > wl.x && p.x < wl.x + wl.w)
{
if(abs(p.y + p.h - wl.y) < speed)
p.y = wl.y - p.h - speed;
else if(abs(p.y - wl.y - wl.h) < speed)
p.y = wl.y + wl.h + speed;
}
//碰撞检测
}
}
int main(int argc,char **argv)
{
SDL_Init(SDL_INIT_EVERYTHING);
win = SDL_CreateWindow("Touch Test",0,0,W,H,SDL_WINDOW_OPENGL|SDL_WINDOW_RESIZABLE|SDL_WINDOW_BORDERLESS);// 配置窗口参数并创建
ren = SDL_CreateRenderer(win, -1, SDL_RENDERER_PRESENTVSYNC);// 为创建的窗口配置渲染器
SDL_GetWindowSize(win,&W,&H);
bl = W / 20;
sur1 = SDL_CreateRGBSurface(0, W, H, 32, 0, 0, 0, 0); //用于画一个矩形来刷屏
SDL_FillRect(sur1, NULL, 0xffacca);
//在sur1上画一个矩形
tex1 = SDL_CreateTextureFromSurface(ren, sur1);
sur2 = SDL_CreateRGBSurface(0,50,50,32,0,0,0,0);
SDL_FillRect(sur2,NULL,0xffffff);
tex2 = SDL_CreateTextureFromSurface(ren,sur2);
SDL_FreeSurface(sur2);
sur3 = SDL_CreateRGBSurface(0,140,40,32,0,0,0,0);
SDL_FillRect(sur3,NULL,0x004444);
wall = SDL_CreateTextureFromSurface(ren,sur3);
SDL_FreeSurface(sur3);
//创建一堆矩形
wl = {3 * bl,10 * bl,150,50};
p = {0,0,bl,bl};
thd = SDL_CreateThread(getTouch,NULL,NULL);
//创建线程控制移动 照搬于傻傻_痴痴的触控教程
while(1)
{
SDL_RenderClear(ren);
SDL_RenderCopy(ren, tex1, NULL, NULL); //刷屏
SDL_RenderCopy(ren,wall,NULL,&wl); //把墙贴上
SDL_RenderCopy(ren, tex2, NULL, &p);//玩家
//刷新屏幕
SDL_RenderPresent(ren);
}
//SDL_DestroyTexture() ...用不到↓↓↓
SDL_DestroyRenderer(ren);
SDL_DestroyWindow(win);
SDL_Quit();
return 0;
}


  • be148TTN
  • 外星人
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
@TTHHR @啊o额iu鱼 @DXKite


2025-05-14 14:24:07
广告
  • DXKite
  • 大哲
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
稍稍能看懂一点。。


  • DXKite
  • 大哲
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
不会,果断滚蛋。。。。。


  • 一周休七日
  • 外星人
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
为什么有能力写那么长却没能力解决问题呢…


  • TTHHR
  • 大哲
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
帮艾特@twtfcu3 //都说留名顶帖会带来好运。。。TIT_>TTHHR
   --来自●●●贴吧客户端


  • 啊o额iu鱼
  • 大哲
    13
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
楼主还是自己再研究下吧,看样子不会有人回答的……
//水水更健康,我是要成为第一个12级的男人……


  • be148TTN
  • 外星人
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
额 删去限速就好了


2025-05-14 14:18:07
广告
  • 冰雨恋辰
  • 外星人
    9
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
你看的出来我说的这句话是什么意思吗?


登录百度账号

扫二维码下载贴吧客户端

下载贴吧APP
看高清直播、视频!
  • 贴吧页面意见反馈
  • 违规贴吧举报反馈通道
  • 贴吧违规信息处理公示
  • 17回复贴,共1页
<<返回c4droid吧
分享到:
©2025 Baidu贴吧协议|隐私政策|吧主制度|意见反馈|网络谣言警示