【DFB】IDirectFBInputDevice 方式处理事件 --键盘移动一个图片显示
2011-04-20 18:06
525 查看
#include <stdio.h>
#include <unistd.h>
#include <directfb/directfb.h>
static IDirectFB *dfb = NULL;
static IDirectFBSurface *primary = NULL;
static IDirectFBSurface *tux = NULL;
static int screen_width = 0;
static int screen_height = 0;
//全局变量
static IDirectFBInputDevice *keyboard = NULL;
int main (int argc, char **argv)
{
DFBSurfaceDescription dsc;
IDirectFBImageProvider *provider;
DFBInputDeviceKeyState escape = DIKS_UP;//先声明一个DFBInputDeviceKeyState枚举变量,
//并将其值定为DIKS_UP,即默认没有按下
int sprite_x, sprite_y, max_x, max_y;//定义四个整形值,其中max_x, max_y用于记录前面坐标允许的最大值,
//sprite_x, sprite_y用于记录图片左上角的坐标值,
//sprite_x在[0, max_x],sprite_y在[0, max_y]范围内
DirectFBInit (&argc, &argv);
DirectFBCreate (&dfb);
dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN);
dsc.flags = DSDESC_CAPS;
dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
dfb->CreateSurface( dfb, &dsc, &primary );
primary->GetSize (primary, &screen_width, &screen_height);
dfb->GetInputDevice (dfb, DIDID_KEYBOARD, &keyboard);
dfb->CreateImageProvider (dfb, "./my.jpg", &provider);
provider->GetSurfaceDescription (provider, &dsc);
dfb->CreateSurface (dfb, &dsc, &tux);//创建一个平面tux,此平面的大小即为图片的大小,信息记录在dsc中
provider->RenderTo (provider, tux, NULL);//将图片Render到tux上,而图片与tux大小一致,则即便使用了NULL,也不会有缩放发生
provider->Release (provider);
//设定4个int变量的值,以保证图片显示在屏幕正中心
max_x = screen_width - dsc.width;
max_y = screen_height - dsc.height;
sprite_x = (screen_width - dsc.width) / 2;
sprite_y = (screen_height - dsc.height) / 2;
DFBInputDeviceKeyState state;
//primary->SetColor(primary, 0x0, 0x0, 0x0, 0xff);
//primary->FillRectangle(primary, 0, 0, screen_width, screen_height);
while (escape == DIKS_UP){
//将tux显示在primary上面
primary->FillRectangle (primary, 0, 0, screen_width, screen_height);
primary->Blit (primary, tux, NULL, sprite_x, sprite_y);
primary->Flip (primary, NULL, DSFLIP_WAITFORSYNC);
//开始图片移动策略,如果想改变移动速度,可调整步进值
keyboard->GetKeyState (keyboard, DIKI_LEFT, &state);
if (state == DIKS_DOWN){
printf("DIKI_LEFT-----------------/n");
sprite_x--;
}
keyboard->GetKeyState (keyboard, DIKI_RIGHT, &state);
if (state == DIKS_DOWN){
printf("DIKI_RIGHT-----------------/n");
sprite_x++;
}
keyboard->GetKeyState (keyboard, DIKI_UP, &state);
if (state == DIKS_DOWN){
printf("DIKI_UP-----------------/n");
sprite_y--;
}
keyboard->GetKeyState (keyboard, DIKI_DOWN, &state);
if (state == DIKS_DOWN){
printf("DIKI_DOWN-----------------/n");
sprite_y++;
}
//开始定义策略使图片始终在屏幕范围内
if (sprite_x < 0)
sprite_x = 0;
else if (sprite_x > max_x)
sprite_x = max_x;
if (sprite_y < 0)
sprite_y = 0;
else if (sprite_y > max_y)
sprite_y = max_y;
keyboard->GetKeyState (keyboard, DIKI_ESCAPE, &escape);//检查DIKI_ESCAPE状态,为下一次循环做准备
//sleep(1);
}
//由小到大的释放资源
keyboard->Release (keyboard);
tux->Release (tux);
primary->Release (primary);
dfb->Release (dfb);
return 0;
}
#include <unistd.h>
#include <directfb/directfb.h>
static IDirectFB *dfb = NULL;
static IDirectFBSurface *primary = NULL;
static IDirectFBSurface *tux = NULL;
static int screen_width = 0;
static int screen_height = 0;
//全局变量
static IDirectFBInputDevice *keyboard = NULL;
int main (int argc, char **argv)
{
DFBSurfaceDescription dsc;
IDirectFBImageProvider *provider;
DFBInputDeviceKeyState escape = DIKS_UP;//先声明一个DFBInputDeviceKeyState枚举变量,
//并将其值定为DIKS_UP,即默认没有按下
int sprite_x, sprite_y, max_x, max_y;//定义四个整形值,其中max_x, max_y用于记录前面坐标允许的最大值,
//sprite_x, sprite_y用于记录图片左上角的坐标值,
//sprite_x在[0, max_x],sprite_y在[0, max_y]范围内
DirectFBInit (&argc, &argv);
DirectFBCreate (&dfb);
dfb->SetCooperativeLevel (dfb, DFSCL_FULLSCREEN);
dsc.flags = DSDESC_CAPS;
dsc.caps = DSCAPS_PRIMARY | DSCAPS_FLIPPING;
dfb->CreateSurface( dfb, &dsc, &primary );
primary->GetSize (primary, &screen_width, &screen_height);
dfb->GetInputDevice (dfb, DIDID_KEYBOARD, &keyboard);
dfb->CreateImageProvider (dfb, "./my.jpg", &provider);
provider->GetSurfaceDescription (provider, &dsc);
dfb->CreateSurface (dfb, &dsc, &tux);//创建一个平面tux,此平面的大小即为图片的大小,信息记录在dsc中
provider->RenderTo (provider, tux, NULL);//将图片Render到tux上,而图片与tux大小一致,则即便使用了NULL,也不会有缩放发生
provider->Release (provider);
//设定4个int变量的值,以保证图片显示在屏幕正中心
max_x = screen_width - dsc.width;
max_y = screen_height - dsc.height;
sprite_x = (screen_width - dsc.width) / 2;
sprite_y = (screen_height - dsc.height) / 2;
DFBInputDeviceKeyState state;
//primary->SetColor(primary, 0x0, 0x0, 0x0, 0xff);
//primary->FillRectangle(primary, 0, 0, screen_width, screen_height);
while (escape == DIKS_UP){
//将tux显示在primary上面
primary->FillRectangle (primary, 0, 0, screen_width, screen_height);
primary->Blit (primary, tux, NULL, sprite_x, sprite_y);
primary->Flip (primary, NULL, DSFLIP_WAITFORSYNC);
//开始图片移动策略,如果想改变移动速度,可调整步进值
keyboard->GetKeyState (keyboard, DIKI_LEFT, &state);
if (state == DIKS_DOWN){
printf("DIKI_LEFT-----------------/n");
sprite_x--;
}
keyboard->GetKeyState (keyboard, DIKI_RIGHT, &state);
if (state == DIKS_DOWN){
printf("DIKI_RIGHT-----------------/n");
sprite_x++;
}
keyboard->GetKeyState (keyboard, DIKI_UP, &state);
if (state == DIKS_DOWN){
printf("DIKI_UP-----------------/n");
sprite_y--;
}
keyboard->GetKeyState (keyboard, DIKI_DOWN, &state);
if (state == DIKS_DOWN){
printf("DIKI_DOWN-----------------/n");
sprite_y++;
}
//开始定义策略使图片始终在屏幕范围内
if (sprite_x < 0)
sprite_x = 0;
else if (sprite_x > max_x)
sprite_x = max_x;
if (sprite_y < 0)
sprite_y = 0;
else if (sprite_y > max_y)
sprite_y = max_y;
keyboard->GetKeyState (keyboard, DIKI_ESCAPE, &escape);//检查DIKI_ESCAPE状态,为下一次循环做准备
//sleep(1);
}
//由小到大的释放资源
keyboard->Release (keyboard);
tux->Release (tux);
primary->Release (primary);
dfb->Release (dfb);
return 0;
}
相关文章推荐
- 【DFB】IDirectFBInputDevice 方式处理事件 --键盘移动一个图片显示
- IOS 键盘的显示与关闭,以及移动显示(UITextView处理完整版)
- ms reportviewer 外联图片不显示的处理方式
- 第六篇:在SOUI中用九宫格拉伸方式显示一个图片资源
- IE处理GIF动画图片onload事件的一个BUG
- 【 java版坦克大战--事件处理】 键盘控制小球上下左右移动
- Kibo是一个简单的用于处理键盘事件的Javascript工具库。
- 一个Android上的以滑动揭示的方式显示并切换图片的View
- img的src地址是一个请求的方式来显示图片
- js中一个函数处理多个事件的方式
- Javascript 键盘事件移动图片
- Scroll View 控件以Thumbnail的方式显示一个文件夹的所有图片,类似图片浏览器
- Android官方开发文档Training系列课程中文版:键盘输入处理之控制输入法的显示方式
- 在《Android PorterDuff.Mode图形混合处理 》这篇博客中,我们讲解了PorterDuff.Mode对图形混合的处理。这篇我们将通过图形混合的原理,来制作一个手动擦除蒙版显示底层图片
- Android上详细的移动事件处理方式GestureDetector
- IOS的处理touch事件处理(依照手指的移动移动一个圆,开发环境用的ios7,storyboard)
- TextView显示带图片html的几种处理方式
- IOS的处理touch事件处理(按照手指的移动移动一个圆,开发环境用的ios7,storyboard)
- 如何获得对窗体移动事件的处理的一个方法
- IOS 键盘的显示与关闭,以及移动显示(UITextView处理完整版)