标题: SDL问题
chenrenjin
新生入学
Rank: 1
注册用户



UID 176881
精华 0
积分 0(积分有什么用?)
帖子 6
阅读权限 10
注册 2006-12-18
状态 离线
发表于 2006-12-20 19:16  资料  个人空间  短消息  加为好友 
SDL问题

我刚接触linux下编程,所以不懂,麻烦各位帮我看看是什么问题Q5B|/D
Q(^M&o H

程序代码|
K2spKW

"vII,V C|
#include <stdio.h> IuVv2WLpF
#include <stdlib.h>
,c[9_O^1Jk
vS8KLinux伊甸园论坛
#include <SDL.h>
%j tu7A2t j~1VFwww.linuxeden.com#include <SDL_image.h>\        pjW:Wvu
#define DIR_UP 0www.linuxeden.comrt4?
~9W:F)@

#define DIR_LEFT 1v.?,rV9HG
#define DIR_DOWN 2;M1c,xD~{'V
#define DIR_RIGHT 3
R~!N#{4D#@SDL_Surface *screen;C[4P4`{1v M
typedef struct Sprite_t { G"^PEPYa
int width;www.linuxeden.com4?,Ro"w2KT,Qn H
int height;
Jz@5g        v+jint x;3N8l-zWo        a(oT s
int y;(bHU7os
int ox;
z        [9MLvuh ?%Lint oy;ru!['AM^4p
int dir;.kw-q:j:|nw`
int subframe;
:d
qV |BS7owww.linuxeden.com
int speed;www.linuxeden.comUx        O$S0qQL
int timer;
&SA.n/@_Cint moving; //use to calculate subframe9Q&`3CE?3Y
SDL_Surface *image;
9c"Q%m_4]9K4v"ka}Sprite_t;
(A3v,{{        Ic*gtypedef enum GameState { A+gf _ X ^
GAME_RUNNING,
Z/^-EiERGAME_OVER,
}"jz-]2hF}GameState;
Vz5@ oBvg-pc2uvoid Init_SDL()
~%w?O0fA-H\Z!C{e
n@'?d

if ( SDL_Init( SDL_INIT_VIDEO) < 0 ) {!k{ s,[0J&C4?[ U R%CB
fprintf(stderr,"Can't init SDL: %s\n",SDL_GetError());
i q-^
jI4iX0j8Xwww.linuxeden.com
exit(1);:G^Xh5k4Hkl+_
}
ovk2Rb;bl&ggscreen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);Linux伊甸园论坛0g9z.[$~9k/~
W1~

if ( screen == NULL ) {
~Z%j
i2UQ7o!Q)uqwww.linuxeden.com
fprintf(stderr, "Error: %s\n",SDL_GetError());
cO:?9JZ.R"e6O
cKW
exit(1);
-jjo,F cChLinux伊甸园论坛} ye'R9M1^v;^
atexit(SDL_Quit);$V%]l7EE3{,m        E.o |
}www.linuxeden.com        E
~ {rC:]*^L/`

void DrawSprite(SDL_Surface *surface,Sprite_t *sprite)

t v#Z
?Hs(eP
{
+zr dE4d` v s9R~www.linuxeden.comSDL_Rect src_rect,des_rect;-@#lA!psTD
sprite->subframe=sprite->timer/4;
q2o1C@Esrc_rect.w=des_rect.w=sprite->width;Linux伊甸园论坛,\Yt+J9Cr8O
src_rect.h=des_rect.h=sprite->height; v0ZE%~,|;Gs5\eT        Oc
src_rect.x=sprite->subframe*sprite->width;
|;U#P)vPE6rbHsrc_rect.y=sprite->dir*sprite->height;
'@ ~HS:}5S0~ U8edes_rect.x=sprite->x;
7k2i"Z
cV|%hXLinux伊甸园论坛
des_rect.y=sprite->y;
Vl&xO8^www.linuxeden.com//Draw sprite to new position
Op.SUX| zwww.linuxeden.comSDL_BlitSurface(sprite->image,&src_rect,surface,&des_rect);4WZ!B1|/x?_
}
Vy5F-g:HsxUvoid ClearSprite(SDL_Surface *surface,Sprite_t *sprite)
l5@QF#x
B7m
{"H.qS4~M5D\!?        K6^2a
SDL_Rect mask;
!IR/V`        _"o6opmask.w=sprite->width;-D7m%l        B]3`}1JM
mask.h=sprite->height;
qR(?4ZZ7v%Y7Nmask.x=sprite->ox;
:y[ Dx@C
x
mask.y=sprite->oy;
L4U:|C4Ys^/_2hwww.linuxeden.com//Clear sprite from the old position|r4Rb
n n

SDL_FillRect(surface,&mask,SDL_MapRGB(surface->format,0,0,0));
-|'i
l5Qi*Xv*ewww.linuxeden.com
}
D
E$PJ        fr+W{+Fwww.linuxeden.com
Uint32 TimeLeft() ,R[9r oS0C)PD
{www.linuxeden.com$OW vj8A4A y
static Uint32 next_time=0;0dq@*F/B
Uint32 now;8B1]"e9lTRY |f4v5D*n
now=SDL_GetTicks();
]JdU5LH/^6U}if(next_time<=now){
]x/n
? TpS        @ y
next_time=now+30;
wY3m:gK+kpreturn(0);mSVsF
}
?K7jg,r:u
O-rc
return(next_time-now);
j:F:K.Sa o.}x,C+s}^/a?0{\"hx)B!f8n
Lwmhy4NK
%y2b4w4},_h
int main()
mu5@lp^!V7o{

Q8[
H4N)^ EnPl
GameState game_state;4r
MK i7]~i*x/\

Sprite_t tank;!R p%F
C]t(S*R

SDL_Event event;

h#{ N*eFLLinux伊甸园论坛
Init_SDL();
6PA
x:UNl;GJwww.linuxeden.com
tank.image=IMG_Load("tank.png");-Sz7XOI,I6Y
SDL_SetColorKey(tank.image,SDL_SRCCOLORKEY,SDL_MapRGB(tank.image->format,255,0,255));
z)J Sj7X%^0ttank.image=SDL_DisplayFormat(tank.image);
adf}/P y,nLinux伊甸园论坛game_state=GAME_RUNNING;&ahklS;G2`
tank.dir=DIR_RIGHT;R{k+Xt
tank.width=32;
l.]w'YEK"i"o3Dtank.height=32;
b3wL~ m5p4uM`tank.x=300;0u^C.M!C5o9~
tank.y=200;
"^kbt1V T;@tank.ox=tank.x;
&x,vOP.xbtank.oy=tank.y;www.linuxeden.comR6A5WoN
B&|U
xP

tank.moving=0;ti8Y9kr0JxO
tank.speed=3;
/e:hp}/jD,_tank.timer=0;Linux伊甸园论坛et;W [9^(d
while(game_state==GAME_RUNNING){
d)J
g/JX        Zy
ClearSprite(screen,&tank);)VZW%^bfh,Y!o&Y$oD
//Get Input
_Of4v,rwww.linuxeden.comSDL_PollEvent(&event);
5uMX1uS Y+q1B }switch(event.type){
6mI^^neIwww.linuxeden.comcase SDL_KEYDOWN:
v
t;@3z2W_"F
M
switch(event.key.keysym.sym){
.CPm        g
z#P$d DR0H
case SDLK_ESCAPE:
p2on$JD)Ngame_state=GAME_OVER;+jc7x;I2?.P)O{m
break;"G{J(R0qCj4@Qb3i
case SDLK_UP:G!|$y%^"i
tank.dir=DIR_UP;
$S x v2I)vk7Q["p OrLinux伊甸园论坛tank.y-=tank.speed;
+XSK@DBbreak;+{Yl$l-N(UFs'h
case SDLK_DOWN:Hm!p@a,\?
R

tank.dir=DIR_DOWN;www.linuxeden.com l;h+P:^J        u9l
tank.y+=tank.speed;{*E"gxd'e z(G[
break;
![+ajzPt:Ncase SDLK_LEFT:Linux伊甸园论坛Y{;~$v?j)IF
tank.dir=DIR_LEFT;{3i;]8C1P:e
tank.x-=tank.speed;

W%hH[ \5h)Owww.linuxeden.com
break;
1D#Y.X,R9GOLinux伊甸园论坛case SDLK_RIGHT:
uF6I}"U,~        Btank.dir=DIR_RIGHT;
0QW*Q(|a
w
tank.x+=tank.speed;
K3u'[
[*T
S?www.linuxeden.com
break;Linux伊甸园论坛ujs6D{
G

default:
bz        i+QJ&pbreak;
t        h5u CO
^
eE
}Linux伊甸园论坛 [&Q^
Zn'Y

case SDL_KEYUP: -_2j/\/sZU-x#b
break;
kAPEa8E)Q

default:
`?s0[2c3rR(]
u
break;
_4t3l#l1|h0w)?}
bjl r`1qu(EN
Cwww.linuxeden.com
{5O        T!zG? QP
DrawSprite(screen,&tank);

a|PK}6w+awww.linuxeden.com
tank.ox=tank.x;Linux伊甸园论坛t7F(IU bN
tank.oy=tank.y;
r/G+rW+LSDL_UpdateRect(screen,0,0,0,0);
Oz3M9g2j?tsSDL_Delay(TimeLeft());

Hn'HRS
tank.timer++;
3D)p-\%d Z `-q7{tank.timer%=8;
1S'NmPV5fLinux伊甸园论坛}
SN Z$U*e?        `amSDL_FreeSurface(tank.image);Linux伊甸园论坛R%I'Je,y        S9N8`
}
9u@j.?4@.@-yLinux伊甸园论坛9_tdO^"x5?M4h
编译的时候提示 6[N+]t^axi        N1W
/tmp/ccCxlEey.o(.text+0xlf8):in function 'main';
0K3J:WZFTX0tswww.linuxeden.comtest.c:undefined reference to 'IMG_Load'7D cfz:lB
collect2:ld 返回 1'B$]$S%Vr
是不是tank.image=IMG_Load("tank.png");这句有问题?+S*p3j%]2n} T1x
请各位指点以下我该怎么改,谢谢

顶部
不容错过的IBM 集群技术资源汇总
chayedan
新生入学
Rank: 1
注册用户



UID 165782
精华 0
积分 0(积分有什么用?)
帖子 11
阅读权限 10
注册 2006-8-28
状态 离线
发表于 2007-3-9 17:07  资料  个人空间  短消息  加为好友 
是个坦克游戏程序吧,IMG_Load()函数定义了没有?好像是没定义啊

顶部
 



当前时区 GMT+8, 现在时间是 2008-5-17 11:10

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.087600 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP