FDU oop贪吃蛇大作业 学习知识与debug血泪教训

   FDU oop贪吃蛇大作业 学习知识与debug血泪教训

        首先先来看一下大作业要求

        提供的源代码在https://github.com/jhpy1024/sfSnake,需要使用SFML2.5库

        那么我完成大作业过程主要是两个阶段:看代码 + 自己写。而这篇文章主要是在这个过程中我学到了什么。

目录

   FDU oop贪吃蛇大作业 学习知识与debug血泪教训

知识学习

一、    使用SFML库创造一个可以多界面跳转的窗口   

二、    HandleInput-Update-Render 结构

三、    关于SFML库中的一些常见函数的解释

DEBUG血泪教训

后记


知识学习

一、    使用SFML库创造一个可以多界面跳转的窗口   

        重点:shared_ptr

        首先是在Game类中使用    sf::RenderWindow window_; 创建一个可视化窗口,然后是该窗口所指向的界面内容,用shared_ptr来实现,static std::shared_ptr Screen;  这里就要学习shared_ptr 是什么了。

        shared_ptr作为智能指针,可有效防止指针指向已被释放的内容,并且当没有智能指针指向某内容时,该内容自动释放。具体可参考其他人的文章,在这里主要是利用自动释放的功能。

        使用它时,常调用如下函数

std::shared_ptr<Screen> Game::Screen = std::make_shared<MenuScreen>();

        其中 是一个类,是的子类。make_shared 函数是创造一个对象,类似于new,返回一个shared_ptr,当没有shared_ptr指向该对象时,该对象自动释放。因此当界面转换时,可以自由将Screen 指向其他对象(再使用一次make_shared)而不用担心释放问题。这个样子可以基本实现创建窗口,并且窗口在不同内容之间转换。

二、    HandleInput-Update-Render 结构

        这个结构在源代码中已经做出来了。但需要理解,并且如果要新建一个界面,例如我自己写的setting界面,也是需要自己写这个结构的。

        首先,应该通过名字可以显然理解这个结构。在运行程序时,处理输入-更新数据-可视化更新,并且始终执行着这一循环。而循环是这样子实现的:

    while (window_.isOpen())

    {

        sf::Time delta = clock.restart();        //  a

        timeSinceLastUpdate += delta;        //  b

        while (timeSinceLastUpdate > Game::TimePerFrame)

        {

            timeSinceLastUpdate -= TimePerFrame;

            handleInput();

            update(TimePerFrame);

        }

        render();        //  c

    }

        不难看到,里面有一个很重要的参数:TimePerFrame。它用来控制刷新时间间隔,当超过了该间隔时,才会执行handleInput等操作。但我仍有一点疑问:这样子的话程序在不断地执行a、b、c行的操作,是否会很占cpu?不解。而事实上,运行它的时候我的电脑都开始启动风扇了,明明只是一个贪吃蛇啊= =        ----疑问点一

        不过这里循环是源代码就有的,不太需要自己处理。接下来看一下这一循环中的函数。</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值