//代码如下
#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;
}
#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;
}