标题:想破脑子都想不会。。求各位帮帮忙
只看楼主
菜鸡一只
Rank: 1
等 级:新手上路
帖 子:23
专家分:4
注 册:2014-12-31
结帖率:85.71%
已结贴  问题点数:20 回复次数:8 
想破脑子都想不会。。求各位帮帮忙
第一段函数,mySquare代表一个小人,通过handle_input键盘操作赋予小人方向和速度,move()和show()函数则是控制小人的移动和展示小人在屏幕上。
//While there's events to handle
        while( SDL_PollEvent( &event ) )
        {
            //Handle events for the square
            mySquare.handle_input();

            //If the user has Xed out the window
            if( event.type == SDL_QUIT )
            {
                //Quit the program
                quit = true;
            }
        }

        //Move the square
        mySquare.move();

        //Show the square on the screen
        mySquare.show();


第二段函数则是控制游戏背景的自动滚动,
//Scroll background
        bgY -= 2;

        //If the background has gone too far
        if( bgY <= -background2->h )
        {
            //Reset the offset
            bgY = 0;
        }

        //Show the background
        apply_surface( bgX, bgY, background2, screen );
        apply_surface( bgX,bgY + background2->h, background2, screen );

        //Cap the frame rate
        if( fps.get_ticks() < 1000 / FRAMES_PER_SECOND )
        {
            SDL_Delay( ( 1000 / FRAMES_PER_SECOND ) - fps.get_ticks() );
        }



现在我想在游戏背景自动滚动的前提下,能通过键盘控制小人的移动,请问这段函数应该如何拼凑,如果放在同一个while里面我试过了不行啊。。。该怎么弄,老师让我们做一个雷电的游戏。好难好难。。。。是SDL的
搜索更多相关主题的帖子: window events 键盘 
2015-02-14 17:11
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:7 
和代码没什么联系,看下介绍游戏引擎的书吧。
sdl没怎么做,我自己做的是opengl+openal+libogg+libjpeg+libpng。引擎我自己写。

so。。。
尝试做最简单的引擎:
题目是在dos下做一张10x10的地图,人物为标记p,地图能走得地方为0,不能走得墙为x
输入特定字符让人物移动。

你做成这个了,sdl的那个也就成了,一个原理。这是最基础的。扩展出来的依靠碰撞和图形矩阵你先别学
2015-02-14 21:58
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
你们老师也扯,类似雷电的游戏必须依赖碰撞,碰撞实现要有点高的物理算法,光是sdl自身好像不提供物理引擎,如果用图形算法去做,效率极其低,被称为垃圾代码。(像素碰撞算法)
你们学点什么东西了?
2015-02-14 22:03
菜鸡一只
Rank: 1
等 级:新手上路
帖 子:23
专家分:4
注 册:2014-12-31
得分:0 
回复 3楼 天使梦魔
没办法啦老师的要求啊,我只会像素碰撞法。各位还是告诉我这两段程序怎么组合吧,我过年后就要交作业了。。。。谢谢啦
2015-02-15 09:02
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:7 
可惜我不会c++调gdi作图,不然应该可以做的。像这种小游戏就用方块碰撞算法,很简单的。

能编个毛线衣吗?
2015-02-15 09:31
菜鸡一只
Rank: 1
等 级:新手上路
帖 子:23
专家分:4
注 册:2014-12-31
得分:0 
回复 5楼 wmf2014
不是啦,可能你误会了我的的意思,我是说怎么样做到运行的时候有游戏背景的滚动,同时你还可以键盘控制人物的移动,键盘控制人物的移动和像素碰撞这两个我都前面用VOID函数写好了,只是不知道怎么组合到一起,是放在同一个while里面吗。。
2015-02-15 10:22
wmf2014
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:216
帖 子:2039
专家分:11273
注 册:2014-12-6
得分:0 
回复 6楼 菜鸡一只
这也不难。gdi里有个函数bitblt可以先在后台把背景和图元混合再刷到屏幕,速度很快的。bitblt和图元可有多种混合方式,比如图元背景全白色则用and的方式可让背景透过来,如果图元背景为黑色,则用or的方式让背景透过来,背景和图元(你说的小人)可事先用PS做好。

能编个毛线衣吗?
2015-02-15 10:37
天使梦魔
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:37
帖 子:564
专家分:2754
注 册:2007-8-29
得分:0 
把两个组合在一起只要一起放入dc中即可。
sdl有自身的2d图形界面和封装opengl的3d界面,我不知道你用的是什么但他们都必须获取并控制dc。
说白了就是你绘图的地方,将绘制背景函数和人物函数放在一起,dc会自动从上往下执行(如果开启垂直同步就是显示器刷新速度每秒执行时间)
绘制的时候设定层就可以了,背景在底,人物在上。
如果说要动态背景可以有很多做法,最简单的就是将贴图渲染部分做成变量状态,这个变量放到dc中(坏处是运动快慢由fps决定,除非自己开定时器)

就这么简单,一般图形入门都有说这个
2015-02-15 14:46
探险家
Rank: 1
等 级:新手上路
帖 子:1
专家分:7
注 册:2015-2-16
得分:7 
新手,,谁能帮我提供个c语言无毒的下载网站啊
2015-02-16 19:17



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-442026-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.110719 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved