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



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

我刚接触linux下编程,所以不懂,麻烦各位帮我看看是什么问题
MQW+NCv#FBLinux伊甸园论坛程序代码
Be)L^G{@A
)P1c9mrS'~]@$cLinux伊甸园论坛#include <stdio.h> za!VX2N
J&N+zn

#include <stdlib.h>
0?gbm&h5c#include <SDL.h>&Hh q!iD@7z
#include <SDL_image.h>
M:b8lV s&H#define DIR_UP 0
B0PP/o7S8CSy%T|Iwww.linuxeden.com#define DIR_LEFT 1www.linuxeden.com,N9["L)_.A4i?
#define DIR_DOWN 2
n#s+p3YzV,jwww.linuxeden.com#define DIR_RIGHT 3(l-z/mLp|g
SDL_Surface *screen;Z?        |yyI |{1u
typedef struct Sprite_t {
0Kp&xmxuX8kint width;
i2Dd)G#C
v&n.aet
int height;

|/v)y6SfN
R*Yt~V
int x;
+B*a5G-Zz6IK"|4ITint y;
yZ5\'}.F

int ox;
9j
{ Zk!vuw5| _m |www.linuxeden.com
int oy;
Of0R D:B7G0fint dir;
@m6J'SInZTwww.linuxeden.comint subframe;3m9?*z;]L3c|~
int speed;www.linuxeden.com8n J!MMg        ec#C
int timer;-^xm.o#S
^mD

int moving; //use to calculate subframe8l2z
MdV$r#` F

SDL_Surface *image;
;b,l nyD4`M8LyG8}}Sprite_t;
z_)g
Z9p3O.E
typedef enum GameState {
|
y6K;h}c {j9s
GAME_RUNNING,
hH2Y.x@L slYGAME_OVER,www.linuxeden.com$_?_jv*O
}GameState;
{'E
b
q3R9}k8Y
void Init_SDL() )W'W+T:YG9w E
{0p`qQu7gK0F)~r
if ( SDL_Init( SDL_INIT_VIDEO) < 0 ) {Linux伊甸园论坛?l6y        o/O0n;}
fprintf(stderr,"Can't init SDL: %s\n",SDL_GetError());
+J%D2_lf@1k2{Mexit(1);
R(@5x5R&@T$n}9i.}#TG*Bt
screen = SDL_SetVideoMode(640, 480, 16, SDL_SWSURFACE);Linux伊甸园论坛Yy+}D6uK
if ( screen == NULL ) {
i `K!kI7^
K3e
fprintf(stderr, "Error: %s\n",SDL_GetError());www.linuxeden.com/HY EbTp|
V:W0G8l

exit(1);
}uZ{3B)irSK%Rwww.linuxeden.com}
8h&U,b'S:j)_:i        ]Oatexit(SDL_Quit);
Fk_c Z4E.F kLinux伊甸园论坛}m3epJB/P b)R
void DrawSprite(SDL_Surface *surface,Sprite_t *sprite) Linux伊甸园论坛:e
X*x        k x%G

{,\
S3cQ*Sse&X:t

SDL_Rect src_rect,des_rect;5u9h3Q }T{N
sprite->subframe=sprite->timer/4;
9F E3z a*J,QF7isrc_rect.w=des_rect.w=sprite->width;www.linuxeden.com)T        UF$pW
src_rect.h=des_rect.h=sprite->height;
Ix        Di'CFOsrc_rect.x=sprite->subframe*sprite->width;V _Ged
src_rect.y=sprite->dir*sprite->height;9N?Y
hfuc@
e

des_rect.x=sprite->x;
`^?p.qFdes_rect.y=sprite->y;Linux伊甸园论坛F#ZQ;cC1JU5V&E
//Draw sprite to new position OuBp FW
P$|

SDL_BlitSurface(sprite->image,&src_rect,surface,&des_rect);;Q
hxp$P"h)z4S_

}
v#d0p8n!C,P#@void ClearSprite(SDL_Surface *surface,Sprite_t *sprite) Linux伊甸园论坛N2P9wR$|{3]
{Linux伊甸园论坛b"t"Iz"c[
SDL_Rect mask;Linux伊甸园论坛o%p([GP)R#x
mask.w=sprite->width;sHdYN\I
mask.h=sprite->height;
!L6`I FlU| Z!d+amask.x=sprite->ox;
J{2s&[:r%r6g;Zmask.y=sprite->oy;:F9d[g/k9n:]]
//Clear sprite from the old position
}#y W!`EphLinux伊甸园论坛SDL_FillRect(surface,&mask,SDL_MapRGB(surface->format,0,0,0));
,LK
a#z        H!N;C_Linux伊甸园论坛
}3^2N%AC|%T_#c
Uint32 TimeLeft()
[tF!tk#kQ0o{
C/lPbg,q%oLinux伊甸园论坛static Uint32 next_time=0;www.linuxeden.come        H"Q |$Fr|g*E1D
Uint32 now; _8l px%u
now=SDL_GetTicks();
,QA
G5df
Gg
x-Pi7Mwww.linuxeden.com
if(next_time<=now){
L]`uQ$es;{next_time=now+30;
a'qK
X4eB*X
return(0);~fnL{
_c

}5~]YX]S
return(next_time-now);
~[xFdw}}Pq[t-x@        uy5M;^(X
)iZ^T#R:x"xq
"Tu&WPv(c%di,X
int main()
Y
fP6Z!DWQ2bwww.linuxeden.com
{
Ux$td} Wwsia        PGameState game_state;www.linuxeden.com Y/p3y-z"s
Sprite_t tank;www.linuxeden.com{LjQ#~
SDL_Event event;B `.F
g:sd:Zej

Init_SDL();

_}G4n8A1E
tank.image=IMG_Load("tank.png");www.linuxeden.com9iI
}{1X2N Q:^\

SDL_SetColorKey(tank.image,SDL_SRCCOLORKEY,SDL_MapRGB(tank.image->format,255,0,255));Linux伊甸园论坛 Q HM%s;q;?
tank.image=SDL_DisplayFormat(tank.image);
2^ O ?:[;hgame_state=GAME_RUNNING;
V.H3HZ$z
uQx-YALinux伊甸园论坛
tank.dir=DIR_RIGHT;
#^9k}$O0` ~%h(u!{tank.width=32;
3M{[n2Ztank.height=32;
?$y R*m:T.eRLinux伊甸园论坛tank.x=300;J&`Mv,_ u)bX['Z
tank.y=200;&L3l6C"Fit
tank.ox=tank.x;www.linuxeden.com3co4eJ.Dn8n9b
tank.oy=tank.y;
yWX^VcwF(ewww.linuxeden.comtank.moving=0;

?*ve j7m$B*Ey
`Linux伊甸园论坛
tank.speed=3;pL6`5hG4kN~
~

tank.timer=0;
B!fO3y~4tPbLinux伊甸园论坛while(game_state==GAME_RUNNING){B(wcz(dSe5i
ClearSprite(screen,&tank);
Oq.F3X6f0@Z m//Get Inputy&s%]_dy5H
SDL_PollEvent(&event);Linux伊甸园论坛I4R+d;t$s        F!{3k'RsY$Bi
switch(event.type){
H?9QZOM$vlzwww.linuxeden.comcase SDL_KEYDOWN: /d_(Vt kC2nM
switch(event.key.keysym.sym){
2f,Mf^#``N:V        mAk+acwww.linuxeden.comcase SDLK_ESCAPE:qw
Q.ev?0\u^

game_state=GAME_OVER;Linux伊甸园论坛9W/Y7y:]sm~
break;
Ew|~*R {`a7^case SDLK_UP:'rOf O
V-x `

tank.dir=DIR_UP;
c p;hKTapLinux伊甸园论坛tank.y-=tank.speed;Linux伊甸园论坛1?*?"^/FL'y
break;www.linuxeden.comFF&Ld8^ s'~
case SDLK_DOWN: hW\| i.W`
tank.dir=DIR_DOWN;www.linuxeden.com`4QR(S:]!J
tank.y+=tank.speed;Linux伊甸园论坛Ht U']
m

break;
1`G"] Ic,r qW;H'dcase SDLK_LEFT:
Wa)mM2M%V+Bf+z tJ0~Linux伊甸园论坛tank.dir=DIR_LEFT;#e;V'J([I i~        L1K
tank.x-=tank.speed;
\+i~4x1^R*Zbreak;
;^G4U"J(e V#bjL Ycase SDLK_RIGHT: WMM-jt6|.lH1J
tank.dir=DIR_RIGHT;.GA&l?FrXh        q"a
tank.x+=tank.speed;
!d3X,S
|'mwww.linuxeden.com
break;
)WN:|sR#sRX!xgwww.linuxeden.comdefault:
a-N)Q'B;ybreak;
J[mq F,vd"Gy awww.linuxeden.com}
T%H` aLQ&db`Gcase SDL_KEYUP:
A1o1B!{q)Xe|zbreak;
-c
y[m$m
|www.linuxeden.com
default:
5B;{W] Hbreak;
?1cW~5W0J)eV+[}j:j)th D~%H7g4d C

D"?d{/D#R0@www.linuxeden.comDrawSprite(screen,&tank);
$aDv CTIT kxLinux伊甸园论坛tank.ox=tank.x;sfp,z
^#T8w

tank.oy=tank.y;
9O bi        vGSD"\SDL_UpdateRect(screen,0,0,0,0);
-oc;F
K&[XH
SDL_Delay(TimeLeft()); M4Ar |'jm~"r%U
tank.timer++;i
o
S@-}XpRY |

tank.timer%=8;
oz0q7b({}i&y uZN$B`E`
SDL_FreeSurface(tank.image);
]Q-XnL i0A
KLinux伊甸园论坛
}Linux伊甸园论坛Q ?.rX4r5T C J

4Q7e,cd,G'v}l编译的时候提示

m)o+B|0K#] nf5\x
/tmp/ccCxlEey.o(.text+0xlf8):in function 'main'; ?;CZ4[l\'h,ba
test.c:undefined reference to 'IMG_Load'3Eu ou        s
mB

collect2:ld 返回 12j)|'K9A*}6I0kyS
是不是tank.image=IMG_Load("tank.png");这句有问题?U
um+u*V#?)R

请各位指点以下我该怎么改,谢谢

顶部
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:00

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

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