个人提问贴
sdl吧
全部回复
仅看楼主
level 11
direct岁月 楼主
记录自己所遇到的问题
2016年01月24日 04点01分 1
level 11
direct岁月 楼主
#include<SDL2/SDL.h>
#include<SDL/SDL_image.h>
int main(int args,char * argv[])
{
SDL_Window * window = NULL;
SDL_Surface * Surface =NULL;
SDL_Init(SDL_INIT_EVERYTHING);
return 0;
}
我也是醉了,真心不知道哪里错了,才敲几行代码。召唤大牛@小牛_牛sky @铃铛兮
2016年01月24日 09点01分 2
level 11
direct岁月 楼主
我想哭,,找了一个多小时终于找出了,各种方法都试了。原来是头文件少了一个空格,要哭死(´;︵;`)
2016年01月24日 09点01分 3
level 11
direct岁月 楼主
#include <SDL2/SDL.h>
#include<SDL2/SDL_image.h>
int main(int args,char * argv[])
{
SDL_Window * window = NULL;
SDL_Surface * screen =NULL;
SDL_Init(SDL_INIT_EVERYTHING);
window =SDL_CreateWindow ("first",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
NULL,NULL,
SDL_WINDOW_SHOWN);
if (window != NULL)
{
//IMG_Init(IMG_INIT_PNG);
screen = SDL_GetWindowSurface(window);
SDL_Surface* surface = NULL;
//surface = IMG_Load("SDL.png");
SDL_Rect rect ;
rect.x = 0;
rect.y = 0;
rect.w = 0;
rect.h = 0;
Uint32 color = SDL_MapRGB(surface->format,0xFF,0x00,0x00);
SDL_FillRect(surface,&rect,color);
//SDL_BlitScaled(surface,NULL,screen,NULL);
SDL_UpdateWindowSurface(window);
SDL_Delay(5000);
SDL_FreeSurface(surface);
SDL_DestroyWindow(window);
SDL_Quit();
}
return 0;
}
按道理应该生成全红的屏幕;为什么没有成功建立窗口
2016年01月24日 12点01分 4
2016年01月24日 12点01分
level 13
在看,在看
2016年01月24日 14点01分 5
完全不知道哪里错了,编译器都没有报错
2016年01月24日 14点01分
level 13
surface是NULL,你得SDL_CreateRGBSurface
然后再SDL_FillRect
2016年01月24日 14点01分 7
让我理一理,这代码敲了我半小时,好多函数总是忘
2016年01月24日 14点01分
回复 direct岁月 :嗯。你可以写到纸上,
2016年01月24日 14点01分
SDL_CreateRGBSurface()不会用
2016年01月24日 14点01分
回复 direct岁月 :sdl wiki上有。。。你百度SDL wiki
2016年01月24日 14点01分
level 11
direct岁月 楼主
#include <SDL2/SDL.h>
#include<SDL2/SDL_image.h>
int main(int args,char * argv[])
{
SDL_Init(SDL_INIT_EVERYTHING);
SDL_Window * window = NULL;
SDL_Surface * screen =NULL;
window =SDL_CreateWindow ("first",SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
NULL,NULL,
SDL_WINDOW_SHOWN);
if (window != NULL)
{
//IMG_Init(IMG_INIT_PNG);
screen = SDL_GetWindowSurface(window);
SDL_Surface* surface = NULL;
surface = IMG_Load("SDL.png");
SDL_Rect rect ;
rect.x = 0;
rect.y = 0;
rect.w = 0;
rect.h = 0;
//surface = SDL_CreateRGBSurface();
//Uint32 color = SDL_MapRGB(surface->format,0xFF,0x00,0x00);
//SDL_FillRect(surface,&rect,color);
SDL_BlitScaled(surface,NULL,screen,NULL);
SDL_UpdateWindowSurface(window);
SDL_Delay(5000);
SDL_FreeSurface(surface);
SDL_DestroyWindow(window);
SDL_Quit();
}
return 0;
}
2016年01月24日 14点01分 8
@小牛_牛sky 那样我不会改,我改成这样为什么还是闪一下
2016年01月24日 14点01分
level 13
你用的电脑还是手机?
2016年01月24日 14点01分 9
手机
2016年01月24日 14点01分
教程不是说手机也可以吗
2016年01月24日 14点01分
教程就是用手机的
2016年01月24日 14点01分
回复 direct岁月 :你图片加载对了么。我刚才试了下,可以
2016年01月24日 14点01分
level 13
另外,你的窗口没有大小。。。我不知道是不是这个原因
2016年01月24日 14点01分 10
改了还是不行,在我一个小伙伴那里可以运行,在我这里就不可以运行了,不知道编译器出什么毛病了,你遇到过吗
2016年01月24日 14点01分
经过我格式化手机,这个问题解决了,好开心(●°u°●)」
2016年01月25日 04点01分
回复 direct岁月 :好吧,好吧
2016年01月25日 05点01分
level 11
direct岁月 楼主
@小牛_牛sky 我每次想除去背景色,但是我不知道颜色编码,有没有这种表格
2016年01月27日 03点01分 11
精品贴里好像有,你可以找找
2016年01月27日 03点01分
回复 小牛_牛sky :en
2016年01月27日 03点01分
回复 小牛_牛sky :找到了
2016年01月27日 04点01分
level 11
direct岁月 楼主
两个小时就敲完这一个小程序,各种报错,终于完善了感觉我效率是不是好低@小牛_牛sky
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
SDL_Surface* surface;
SDL_Renderer* renderer;
SDL_Texture* texture;
SDL_Window* window;
SDL_Rect rect1 = {
0,0,100,100
};
SDL_Rect rect2= {100,0,100,100
};
int main (int agrs,char* argc[])
{
SDL_Init(SDL_INIT_EVERYTHING);
IMG_Init(IMG_INIT_PNG);
window = SDL_CreateWindow("Renderer",
SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
0,0,
SDL_WINDOW_SHOWN);
renderer = SDL_CreateRenderer(window,-1,SDL_RENDERER_ACCELERATED);
surface = IMG_Load("SDL.png");
texture = SDL_CreateTextureFromSurface(renderer,surface);
SDL_RenderClear(renderer);
SDL_RenderCopy(renderer,texture,&rect1,&rect2);
SDL_RenderPresent(renderer);
SDL_Delay(5000);
SDL_FreeSurface(surface);
SDL_DestroyWindow(window);
SDL_DestroyTexture(texture);
SDL_DestroyRenderer(renderer);
SDL_Quit();
return 0;
}
2016年01月27日 04点01分 12
level 11
direct岁月 楼主
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_ttf.h>
#define FontSize 100
#define worlds "文本测试"
#define angle 90
SDL_Texture* Texture = NULL;
SDL_Renderer* Renderer = NULL;
TTF_Font*Font;
SDL_Surface* Surface = NULL;
SDL_Window* Window;
int main (int args,char argv[])
{
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
Window = SDL_CreateWindow("文字",
SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
100,100,SDL_WINDOW_SHOWN);
//Surface = SDL_GetWindowSurface(Window);
SDL_Color Color;
Color.r = 0xff;
Font = TTF_OpenFont("/system/fonts/DroidSansFallback.ttf",FontSize);
Renderer = SDL_CreateRenderer(Window,-1,SDL_RENDERER_ACCELERATED);
Surface = TTF_RenderUTF8_Blended(Font,worlds,Color);
Texture = SDL_CreateTextureFromSurface(Renderer,Surface);
int w ,h;
SDL_QueryTexture(Texture,NULL,NULL,&w,&h);
SDL_Rect Rect;
Rect.x = 150;
Rect.y = 500;
Rect.w = w;
Rect.h = h;
SDL_Point Point;
Point.x = 100;
Point.y = 100;
SDL_RenderClear(Renderer);
TTF_CloseFont(Font);
SDL_RenderCopyEx(Renderer,Texture,NULL,&Rect,angle,&Point,SDL_FLIP_NONE);
SDL_RenderPresent(Renderer);
SDL_Delay(5000);
SDL_FreeSurface(Surface);
SDL_DestroyWindow(Window);
SDL_DestroyRenderer(Renderer);
SDL_DestroyTexture(Texture);
return 0;
}
2016年01月28日 09点01分 13
这是今天花了一个小时左右敲出来的,感觉蛮好的
2016年01月28日 09点01分
@小牛_牛sky 我想知道屏幕上一个位置的x,y怎么办?楼上的代码我找旋转中心试了好久才试出一个不错的旋转中心
2016年01月28日 09点01分
@direct岁月 SDL_GetWindowSize是获得分辨率 SDL_UpdateWindowSize是更新分辨率
2016年01月29日 00点01分
回复 direct岁月 :sdl wiki 百度
2016年01月30日 14点01分
level 11
direct岁月 楼主
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
SDL_Renderer* Renderer = NULL;
SDL_Texture* Texture = NULL;
TTF_Font* Font = NULL;
SDL_Surface* Surface = NULL;
SDL_Window* Window = NULL;
int Destroy(void);
int Init(void)
{
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
Window = SDL_CreateWindow("tfinger test",
SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
100,100,SDL_WINDOW_SHOWN);
Renderer = SDL_CreateRenderer(Window,-1,SDL_RENDERER_ACCELERATED);
if (Renderer == NULL)
{
Destroy();
return 0;
}
Font = TTF_OpenFont("/system/fonts/DroidSansFallback.ttf",20);
if (Font == NULL)
{
Destroy();
return 0;
}
return 0;
}
int printtext(int x, int y, const char* text)
{
SDL_Color Color;
Color.r = 0xff;
Color.g = 0;
Color.b = 0;
Color.a = 0;
Surface = TTF_RenderUTF8_Blended(Font,text,Color);
if (Surface == NULL)
{
Destroy();
return 0;
}
TTF_CloseFont(Font);
Texture = SDL_CreateTextureFromSurface(Renderer,Surface);
if (Texture == NULL)
{
Destroy();
return 0;
}
SDL_RenderClear(Renderer);
TTF_Quit();
SDL_Rect Rect;
Rect.x = x;
Rect.y = y;
SDL_RenderCopy(Renderer,Texture,NULL,&Rect);
return 0;
}
/*SDL_Color* Color(int i)
{
SDL_Color Red {0xff,0,0};
return &Red;
}*/
int Destroy(void)
{
SDL_DestroyRenderer(Renderer);
SDL_FreeSurface(Surface);
SDL_DestroyWindow(Window);
SDL_DestroyTexture(Texture);
SDL_Quit();
return 0;
}
int main (int args, char* argc[])
{
Init();
char string[80];
sprintf(string,"test tfinger");
printtext(100,100,string);
SDL_RenderPresent(Renderer);
SDL_Delay(2000);
Destroy();
return 0;
}@小牛_牛sky 又遇到问题了,不知道为什么没有文字输出,楼上的代码都可以输出文字,我只是把代码分成了几个小函数,编译没有报错,每个指针都不是NULL。麻烦你帮我看看
2016年01月30日 05点01分 14
找到那里错了Rect.w = Surface->w; Rect.h = Surface->h; 少了这些代码,字可能太大所以看不到
2016年01月30日 07点01分
level 11
direct岁月 楼主
@小牛_牛sky @铃铛兮 怎样使一张SDL_Texture*类型图片放到另一张SDL_Texture*类型上,我怎样都解决不了,永远只会显示后放上去的图片,第一张会被第二张覆盖,我只好留一点空隙给第一张图片才能使他们一起显示,如何使一张图片加载在另一张上面
#include <stdio.h>
#include <SDL2/SDL.h>
#include <SDL2/SDL_image.h>
#include <SDL2/SDL_ttf.h>
SDL_Renderer* Renderer = NULL;
SDL_Texture* Texture = NULL;
SDL_Texture* Texturebackground = NULL;
TTF_Font* Font = NULL;
SDL_Surface* Surface = NULL;
SDL_Surface* background = NULL;
SDL_Window* Window = NULL;
int Destroy(void);
int Init(void)
{
SDL_Init(SDL_INIT_EVERYTHING);
TTF_Init();
Window = SDL_CreateWindow("tfinger test",
SDL_WINDOWPOS_UNDEFINED,SDL_WINDOWPOS_UNDEFINED,
100,100,SDL_WINDOW_SHOWN);
Renderer = SDL_CreateRenderer(Window,-1,SDL_RENDERER_ACCELERATED);
if (Renderer == NULL)
{
Destroy();
return 0;
}
Font = TTF_OpenFont("/system/fonts/DroidSansFallback.ttf",20);
if (Font == NULL)
{
Destroy();
return 0;
}
return 0;
}
int printtext(int x, int y, const char* text)
{
SDL_Color Color;
Color.r = 0xff;
Color.g = 0;
Color.b = 0;
Color.a = 0;
Surface = TTF_RenderUTF8_Blended(Font,text,Color);
if (Surface == NULL)
{
Destroy();
return 0;
}
TTF_CloseFont(Font);
Texture = SDL_CreateTextureFromSurface(Renderer,Surface);
if (Texture == NULL)
{
Destroy();
return 0;
}
SDL_RenderClear(Renderer);
TTF_Quit();
SDL_Rect Rect;
Rect.x = x;
Rect.y = y;
Rect.w = Surface->w;
Rect.h = Surface->h;
SDL_RenderCopy(Renderer,Texture,NULL,&Rect);
return 0;
}
SDL_Surface* Background(void)
{
IMG_Init(IMG_INIT_JPG);
background = IMG_Load("background.jpg");
Texturebackground = SDL_CreateTextureFromSurface(Renderer,background);
SDL_RenderCopy(Renderer,Texturebackground,0,0);
IMG_Quit();
return background;
}
/*SDL_Color* Color(int i)
{
SDL_Color Red {0xff,0,0};
return &Red;
}*/
int Destroy(void)
{
SDL_DestroyRenderer(Renderer);
SDL_FreeSurface(Surface);
SDL_FreeSurface(background);
SDL_DestroyWindow(Window);
SDL_DestroyTexture(Texture);
SDL_Quit();
return 0;
}
int main (int
2016年01月30日 08点01分 15
level 11
direct岁月 楼主
int main (int args, char* argc[])
{
Init();
char string[80];
sprintf(string,"test tfinger");
Background();
printtext(100,100,string);
SDL_RenderPresent(Renderer);
SDL_Delay(2000);
Destroy();
return 0;
}
2016年01月30日 08点01分 16
1 2 3 尾页