ps:能力有限,若有错误及纰漏欢迎指正、交流

  • 11.1 鼠标显示问题(harib08a)

存在问题:

​ 在harib07d中鼠标移动到最右侧后就不能再往右移了

解决办法:

将

if (mx > binfo->scrnx - 16) {
mx = binfo->scrnx - 16;
}
if (my > binfo->scrny - 16) {
my = binfo->scrny - 16;
}

修改为:

if (mx > binfo->scrnx - 1) {
mx = binfo->scrnx - 1;
}
if (my > binfo->scrny - 1) {
my = binfo->scrny - 1;
}

又出现以下问题:

​

图 11.1.1

  • 11.2 实现画面外的支持(harib08b)

那么,为什么会画到另一边去呢,原因在于:VRAM的存储方式。由harib08a的代码,增大了mx,my的范围,使得鼠标所在的图层超出了屏幕,但sheet_refreshsub的代码决定它不会有 越界判断,而VRAM是一个一维数组,这会导致图像被写入“下一行屏幕”,即超出了改行在 一维数组中的范围。如图11.2.1

                                            图11.2.1

经过上面的理解,便可得到下面的改进办法,即书中给出的

解决办法:

  • 只有 sheet_refreshsub 是把图层内容写入VRAM,故可增加 检测,使其不会绘制超出画面的区域
void sheet_refreshsub(struct SHTCTL *ctl, int vx0, int vy0, int vx1, int vy1)
{
int h, bx, by, vx, vy, bx0, by0, bx1, by1;
unsigned char *buf, c, *vram = ctl->vram;
struct SHEET *sht;
/* 如果refresh的范围超出了画面则修正 */
if (vx0 < 0) { vx0 = 0; }
if (vy0 < 0) { vy0 = 0; }
if (vx1 > ctl->xsize) { vx1 = ctl->xsize; }
if (vy1 > ctl->ysize) { vy1 = ctl->ysize; }
for (h = 0; h <= ctl->top; h++) {
(中略)
}
return;

11.1/2 鼠标显示问题(harib08a)11.2 实现画面外的支持(harib08b)的更多相关文章

  1. Math.round(11.5)等于()Math.round(-11.5)等于()

    几天前去面试,这道简单的题目居然做错了,看来基础就是慢慢积累的.并不断使用和复习才会成为高手,假设基础不是那么熟练.恐怕在成为高手的路上会困难重重.所以在做项目的间歇时间.偶尔回顾一下最基础的知识.是 ...

  2. IDEA鼠标显示javadoc的设置

    IDEA鼠标显示javadoc的设置 从Eclipse切换到IDEA中以后最不适用的就是鼠标放到方法上没有注释弹出来给我看,很难受,每次使用ctrl+Q来看总觉得不开心,找了一下设置,设置方法如下: ...

  3. hibernate中基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同

    基于主键映射1-1关联关系和基于外键映射1-1关联关系的不同,主要区别是在配置映射文件上会有区别 两个持久化类为Manager和Department 1:基于主键映射1-1关联关系 1)使用其他持久化 ...

  4. [UE4]工程设置:自动捕获鼠标、通过代码设置鼠标显示隐藏、输入模式、编译时自动保存

    一.在4.20版本中运行游戏,在没有进行任何设置的情况下,游戏不会自动捕获鼠标,游戏不会接受输入,需要手动点一下游戏界面才行.如果要跟老版本一样运行游戏自动捕获鼠标,需要进行设置 二.也可以通过代码的 ...

  5. Oracle 11g 的bug?: aix 上,expdp 11.2.0.1 导出,impdp 11.2.0.3 导入,Interval 分区的 【Interval】 分区属性成了【N】

    如题: Oracle 11g 的bug?: aix 上,expdp 11.2.0.1 导出,impdp 11.2.0.3 导入,Interval 分区的 [Interval] 分区属性成了[N] 谨记 ...

  6. java基础面试题:Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

    package com.swift; public class Math_Round { public static void main(String[] args) { /* * Math roun ...

  7. Oracle Study之--Oracle 单实例11.2.0.1.0升级到11.2.0.3.0

    Oracle Study之--Oracle 单实例11.2.0.1.0升级到11.2.0.3.0 系统环境: 操作系统:RedHat EL6(64位) Oracle:    Oracle 11gR2 ...

  8. Mac操作:Mac系统移动鼠标显示桌面(移动鼠标到角落)

    很多朋友都发现,有的人在用Mac的时候,鼠标一划就可以显示桌面,或者显示Launchpad.其实很简单,下面就介绍这个方法. 首先打开系统偏好设置: 然后点击红色圈中的图标:MissionContro ...

  9. CSS 设置鼠标显示形状

    CSS 设置鼠标显示形状 <style type="text/css"><!-- span {display:block;line-height:30px;mar ...

  10. 编写程序,计算当n=10000,20000,30000...100000时,π的值.求π的近似公式 π=4*(1-1/3+1/5-1/7+1/9-1/11+1/13-...+1/(2n-1)-1/(2n+1))

    该程序是求的 π 近似值,所以随着 i 的增大,值会无线接近于 3.1415926... 代码示例 : package judgment;/** * 编写程序,计算当n=10000,20000,300 ...

随机推荐

  1. yum install的时候提示:Loaded plugins: fastestmirror

    fastestmirror是yum的一个加速插件,这里是插件提示信息是插件不能用了. 不能用就先别用呗,禁用掉,先yum了再说. 1.修改插件的配置文件 # vi  /etc/yum/pluginco ...

  2. Asp.Net Core中dotnet 命令行语法

    查看dotnet是否安装成功 dotnet -v dotnet-ef 不存在需要先安装(默认安装最新的版本) dotnet tool install -g dotnet-ef dotnet-ef 不存 ...

  3. FFmpeg 命令行

    FFmpeg命令行帮助 #>ffmpeg -h #>ffmpeg -h long #>ffmpeg -h full 将视频按照指定的宽高输出 #>ffmpeg -i input ...

  4. MFC编辑框字符显示时无法换行的问题解决

    字符串结尾加上"\r\n": 编辑框属性设置:Auto HScroll为False,Multiline为True,Want Return为True.

  5. Vue3 流程图组件库 Vue Flow 简单使用

    官网 Vue Flow 官网 Vue Flow GitHub 安装 npm i --save @vue-flow/core yarn add @vue-flow/core pnpm i @vue-fl ...

  6. vue 添加多条数据 添加日期

    效果图添加多条数据,日期是具体到天. 后端数据格式time:[ { s_time:' ' , e_time: ' ' }] <p v-for="(item,index) in form ...

  7. 二叉树系列之Treap树

            Treap是一棵拥有键值.优先级两种权值的树 struct node{ int size;//以这个结点为根的子树的结点总数量,用于名次树 int rank;//优先级 int key ...

  8. Python 使用json存储数据

    一.前言 很多程序都要求用户输入某种信息,如让用户存储游戏首选项或提供要可视化的数据.不管专注的是什么,程序都把用户提供的信息存储在列表和字典等数据结构中.用户关闭程序时,你几乎总是要保存他们提供的信 ...

  9. sql server 01

    1. 数据库管理系统(DateBase Management System )DBMS 是专门为管理数据库而设计的一个电脑软件系统 分为两种: (1)关系数据库:建立在关系模型基础上的数据库,比如 S ...

  10. UE4 联网RPC部分

    有些人生来就是为了奔跑,而有些人,则拥有更高的目标> 笔者近期在进行UE C++网络的一些开发,发现RPC这个部分它看起来很简单,理解起来也算不上难.但真正应用起来,对netcode经验不多的人 ...