- 博客(52)
- 资源 (58)
- 收藏
- 关注
原创 GAMES101 作业0 环境配置 PC下简单配置i
GAMES101提供了计算机图形学相关教学知识,闫教授及其团队也为大家准备了相应课程作业。课程作业部署在虚拟机上,以便免去环境部署的麻烦。但对于一些同学来说,还是直接在WIN的VS上编码,本文对此进行简单说明。
2022-11-24 21:13:40
825
原创 游戏中的各种简单实现方案
-- 角色移动--[[ 一般过程:1)lua层发起寻路;2)c++层利用AStar计算路线,run每帧执行一步]]--------------- lua ----------------function moveToDes(targetx,targety) local result = self.m_char:requestPath(targetx,targety) --...
2022-11-24 15:54:14
318
1
原创 IGraph笔记-使用VS调用igraph静态库
源码下载及编译目前最新版本iGraph0.8.0,下载路径如下:下载好后解压,运行igraph工程,重新编译,编译完成后在Debug下生成igraph.lib;新建一个空的C++项目配置环境,依次是:附加包含目录(include所在路径)、附加库目录(igraph.lib所在路径)、附加依赖项igraph.lib忽略特定默认库,之所以要忽略,是因为静态lib库中已包含这些函数实现,...
2020-02-21 18:54:00
1108
原创 QT 基础功能整理
XML操作 QFile file("my.xml");//建立指向my.xml文件的QFile对象. if(!file.open(QIODevice::WriteOnly | QIODevice::Truncate)) // 只写方式打开,并清空以前的信息 retutn 0; QDomDocument doc; //新建立一个QDomDocument...
2019-12-18 13:59:33
755
原创 Cocos2d-x基础知识相关
cocos2d-x采用的内存管理机制 1)c++中的智能指针(实则就是将动态分配内存与自动变量关联,借助自动变量的自动释放来释放动态分配内存)在管理数据内存方面的优缺点; 2)如何管理引用计数,如对于node,何时retain,何时release; 3)智能指针实现方式; - ...
2018-10-30 21:00:01
366
原创 Cocos2dx CCLabel
本文对CCLabel的实现进行相关介绍:1 一般性绘制流程绘制流程与之前介绍的Render常规性流程保持一致,其入口为visit:void Label::visit(Renderer *renderer, const Mat4 &parentTransform, uint32_t parentFlags){ //... if (_systemFontDir...
2018-06-04 20:36:19
1853
原创 Cocos2dx Render绘制系统
1 绘制系统概览cocos-2dx 3.0之前,元素的绘制逻辑分布在元素内部的draw()方法内,因此紧密地依赖UI树的遍历,这种捆绑式的架构通常难易优化。为什么呢?因为UI树的遍历顺序直接决定了元素的绘制顺序,我们便无法通过优化绘制序列来提升绘制效率。实际上,绘制序列应当与UI树的遍历序列分离。 3.0之后的版本对此进行了重构。新的绘制系统架构完成了以下优化目标:将绘制系统的具体实现...
2018-05-23 16:10:56
1397
1
原创 日常代码重构笔记
这里存放一些平时看代码时觉得需要重构的地方并记录下来(语言可能不止一种),供大家参考|讨论。1. 数据容器一致性操作|函数单一职能功能需求:对多个节点布局时,如果节点排布超出屏幕则将预定节点调整至一个可滑动容器中(scrollUI); 数据容器:1)originalNodeLst : 存放原始节点;2)showedNodeLst :显示出来的第一层节点,视窗节点布局时使用该数据容器,当节点未被移至
2018-03-21 19:14:24
386
原创 游戏引擎架构-学习笔记
5 游戏支持系统5.1 子系统的启动和终止5.1.1 c++的静态初始化次序5.2 内存管理5.2.1 优化动态内存分布5.2.2 内存碎片5.2.3 缓存一致性7 游戏循环及实时模拟7.1 渲染循环7.2 游戏循环7.2.1 游戏循环的架构风格1. 视窗消息泵2. 回调驱动框架3. 基于事件的更新7.3 抽象时间线7.3.1 真实时间线7....
2018-03-12 16:18:31
4540
原创 现代操作系统-学习笔记
1 引论1.1 计算机硬件介绍1.1.1 处理器1.2 操作系统概念1.2.1 进程(简述)2 进程与线程2.1 进程2.2 线程2.3 进程间通行2.3.1 竞争条件2.3.2 临界区2.3.3 忙等待的互斥2.3.4 睡眠与唤醒2.3.5 信号量2.3.6 互斥量2.3.7 管程2.3.8 消息传递2.3.9 屏障1 引论...
2018-03-06 18:56:49
616
原创 lua 自定义控件及动画控制(3) ---- 实现一系列游戏中的消息公告提示
1 消息上漂提示实现方法 创建一个Layer图层并加载至场景中;从消息队列中选择队头消息,加载至Layer并同时移出队列;利用MoveTo方法将Layer向上移动一定长度(此时Layer中所有子节点消息都随之向上移动),之后将Layer所有子节点位置向上移动同等长度并将Layer位置重置成初始位置,之后递归这一动作,直到消息队列为空;当向消息队列中添加消息时需要判断消息处理的递归动作
2018-01-29 10:14:19
637
原创 Lua 基础知识|特性使用集合
1. table.sort下面是两个错误排序函数:local t = { [1] = {id=1,name="1"}, [2] = {id=2,name="2"}, [3] = {id=4,name="3"}, [4] = {id=4,name=&am
2017-11-22 10:56:44
462
原创 cocos2dx - lua 自定义控件及动画控制(2) ---- 基于Action实现循环滚动效果
1. lua层简化版动画系统cocos2dx中的Action系统能实现一般性的动画控制。但是对于一些特殊的动画需求,如何处理?一种方法是在C++层派生新的Action子类,继承原有机制,使用方法与一般Action无异。但很多时候修改或增加C++层代码并不方便,能否直接在lua层定制属于自己的Action?答案是肯定的,但是lua层的实现不能简单继承c++层的Action,因为它无法修改Acti
2017-11-21 10:28:08
1121
原创 Cocos2dx 异步加载纹理
异步加载资源过程 异步加载的执行过程主要在addImageAsync函数中: 判定当前路径对应的纹理是否已经加载,如果未加载,为该纹理创建一个AsyncStruct 数据结构存放该纹理数据,并加入至_requestMutex请求队列中。在创建的用于专门解析纹理的新线程LoadImage中,请求队列中的数据将被逐个解析至AsyncStruct .image中并加入已解析队列_responseQueu
2017-10-19 12:13:57
1101
原创 lua 算法题集(1)
此处收集一些简单的算法以及其lua的简单实现。(提供的实现代码并非为最优或最佳,也可能遗漏了某些特殊情形,因此仅供参考。若存在问题,可以留言交流)1 数据结构相关1.1 数组1 将一个递增数组前后部分互换,查找数组的最小数local t = {3,4,5,12,45,1.1,1.5,2} -- 一般情形local t = {1,0,1,1,1} -- 特殊情形 只能走顺序查找function
2017-10-17 16:57:20
2474
1
原创 Cocos2dx Action动画机制
1 动画执行过程cocos中的动画通过节点执行,如: node:runAction( cc.Sequence:create(cc.DelayTime:create(1.4),cc.CallFunc:create(removeThis))) runAction方法将动画添加至动画管理器中。动画管理器将节点的动画信息全部关联至element中,并以节点作为key,element作为value生成ha
2017-10-11 17:53:07
2025
原创 Cocos2dx 事件响应机制(2):事件处理机制
1 事件的工作机制 图1 传统事件系统如上图,模块A为事件触发者,模块B为事件响应者。A的实现依赖于模块B的实现,如果B的实现发生变化,A也可能需要作出相应调整。Cocos用订阅者模式将事件的触发者和响应者分开。触发者向一个公共的事件分发器发送一个事件消息,事件响应者向事件分发器订阅一个特定类型的消息来响应事件。以图1为例,B创建一个订阅者(ListenerB)并将此订阅者注册至事件分发器中,其
2017-09-27 18:59:40
1182
原创 lua 自定义控件及动画控制(1) ---- 实现自定义滑动控件
1 lua控件基类_class = {}local UIBase = class("UIBase",cc.Node)function UIBase:ctor() -- 触摸监听事件 local listener = cc.EventListenerTouchOneByOne:create() listener:registerScriptHandle
2017-09-14 18:26:02
1840
原创 LUA 文本编辑相关
1 文本动画播放实现文本打字机动画播放。function TestNode:createLabel() local label = ccui.Text:create() label:setString("this is a test. \n a animation test") label:setFontSize(30) label:ignoreContentAdaptWithSi
2017-08-29 17:32:54
754
转载 Cocos2dx 事件响应机制(1): GLView
CCGLView.cpp:部分代码注释如下,由于作者是在windows下阅读的代码,因此这里的CCGLView的路径为【 cocos2d\cocos\platform\desktop\CCGLView.cpp 】:// GLFWEventHandler/*定义了一个管理G
2017-05-25 17:13:54
1753
原创 lua 协程 | 协程实现消息机制(事件队列轮询处理机制)
Lua 协同程序(coroutine)与线程比较类似:拥有独立的堆栈,独立的局部变量,独立的指令指针,同时又与其它协同程序共享全局变量和其它大部分东西。游戏中,有时在处理消息时,希望一条一条消息独立处理(独立堆栈),且希望每条消息在不同场景内等待式逐步进行(如一个场景消息处理完,挂起,经过100ms再进行当前消息下一场景的处理),协程能够完成这一过程。下面提供一种实现方案。local ms
2017-05-10 12:06:32
5314
原创 lua 文件路径 字符串处理 数据结构 正则表达式
1 文件路径相关处理-- 生成父目录下自己的文件路径rootpath = ... --文件当前路径dotindex = string.find(rootpath, "%.%w+$") --返回路径中最后一个点号位置parentpath = string.sub(rootpath, 1, dotindex-1) --提取上一级文件目录mypath = string.format(
2017-03-20 15:26:19
1698
原创 Emgu cv中的SIFT算法实现
SIFT算法大家都比较熟悉,网上的版本很多,刚开始接触时我主要研究的是C++,因为相对于C#,基于OPEN CV C++的SIFT算法资料更多,但是由于想要实现较为理想的界面效果,最终还是放弃了使用C++转而使用C#。C#中SIFT算法主要分为三种:1)脱离Emgu cv平台,完全手动实现所有SIFT算法函数,这样的程序虽然实现有些困难,但是完全可借助已有的C++程序做更改,而
2016-07-27 17:23:20
3072
原创 cocos2d-x俄罗斯方块--基于简单工厂的程序重构
1 前言前些天看了一个Cocos2D写的俄罗斯方块代码(下载网址为:http://www.okbase.net/file/item/27944),代码逻辑很清晰。2 讨论俄罗斯方块游戏逻辑很简单(其实细节也很多),主要包含五个部分:下移、左移、右移、形状变换(上移)以及消行。于是,该代码的结构为:这么写存在什么问题?举个例子,如果此时,玩家需要新增或自定义一些方块的样式,并将其
2015-11-26 21:32:39
3439
原创 大话设计模式学习篇--策略模式
1 以做一个商场收银软件为例引入基于单价和商品数量进行收费。程序写死在主函数体内。2 增加打折、满减活动最简单的做法,是直接在主函数体内增加打折、满减的类型判断,并针对不同的类型进行不同的处理。很明显,这种做法很不合理,首先,这意味着:每增加一次新的打折或满减项目,都需在主函数的switch判断分支下增加新的程序,其次,日后商场可能会新增其他类型的活动,这也将使得程序的维护越来越难
2015-11-23 23:24:46
499
原创 大话设计模式学习篇--简单工厂模式
1 以一个计算器例子引入将数据的输入和计算(加减乘除等)都写入主函数体内,代码难以得到复用。2 业务封装将业务逻辑(计算逻辑)与界面输入分隔开,将业务逻辑独立到类当中。3 业务的继承与多态在第二部分,计算逻辑被独立在一个类当中,实现了封装,但这还远远不够。现实情况下,业务逻辑通常会发生变化,如果整体的业务逻辑均放在一个类下,那么业务的修改将面临很多风险。这个时候,可采用继承和
2015-11-22 22:02:38
462
原创 计算机中的有符号数和无符号数
1.概念 在计算机中,可以区分正负类型的数,成为“有符号数”(signed);无正负类型的数(只有整数类型),成为“无符号数”(unsigned)。简明的说,无符号说就是其所有的位数都用来表示数值的大小,有符号数除最高位来表示数值的正负外(0表示正数;1表示负数),其余各位用来表示数值的大小。举个例子说明一下:十机制数 正数255 二进制表达形式:1111 1111十机制数 负数
2015-09-05 11:46:36
4610
转载 字符串匹配的KMP算法
字符串匹配的KMP算法举例来说,有一个字符串"BBC ABCDAB ABCDABCDABDE",我想知道,里面是否包含另一个字符串"ABCDABD"?许多算法可以完成这个任务,Knuth-Morris-Pratt算法(简称KMP)是最常用的之一。它以三个发明者命名,起头的那个K就是著名科学家Donald Knuth。
2015-08-29 21:51:04
472
转载 程序员笔试面试--基础知识
1. 面向对象的程序设计思想是什么?答:把数据结构和对数据结构进行操作的方法封装形成一个个的对象。 2. 什么是类?答:把一些具有共性的对象归类后形成一个集合,也就是所谓的类。 3. 对象都具有的两方面特征是什么?分别是什么含义?答:对象都具有的特征是:静态特征和动态特征。静态特征是指能描述对象的一些属性(成员变量),动态特征是指对象表现出来的行为
2015-08-22 14:51:16
944
原创 单链表之删除某一位置节点
单链表删除某一位置节点的程序十分容易,但也容易出错。网上流传的一些程序并不正确。这一程序的关键点在于:删除某一位置节点,那么需首先确定其前驱结点。前驱节点存在一些特例情况:当前节点为空、当前非空但后继为空(尾节点)。同时,还要进行断言以及待删节点为首节点的相关处理。完整程序如下:#include "stdafx.h"#include #include typedef struc
2015-08-13 12:39:15
1703
转载 《编程之美》读书笔记(1)--中国象棋将帅问题
中国象棋将帅问题由于比较简单,该问题的具体描述是:(根据中国象棋的基本原则)在只有将帅棋盘上,找出所有双方可以落子的位置(将帅不能碰面),但只能使用一个变量。直觉上我们想到,只要遍历将帅所有可能的位置,去除将帅冲突的位置即可。可见,剩下的问题就在于如何使用一个变量来做二重循环的遍历。书中解法一给出的方法是将一个Byte变量拆成两个用,前一半代表“帅”可以走的位置,后一个变量代表“将”可以走的位置(
2015-07-29 16:58:40
526
原创 程序员笔试面试--数据库知识
1 数据库概念1 数据管理的发展历程:人工管理、文件系统、数据库系统2 SQL语言的功能:1) 数据查询 SELECT; 2) 数据操作 INSERT UPDATA DELETE 3) 数据定义 CREATE(数据表的建立) DROP(数据表的删除) 4) 数据控制 GRANT(为用户授予系统权限) REVOKE (收回系统权限)3 SQL语句使用方法(重点掌握
2015-07-29 11:52:24
723
原创 程序员笔试面试算法题系列--数组
题目来源于《程序员面试笔试宝典》、各大博客以及历年真题,供大家查漏补缺。(持续更新中)1 递归实现数组求和void Sum(int a[],int n,double& sum)每次递归,在sum上累加,同时n自减,当n2 利用一个for循环打印二维与三维数组 double total=row*col;for(int k=0;k<total;k++){ printf("%d
2015-07-27 20:19:22
713
原创 程序员笔试题--C++程序判读精选集
本文笔试题素材来源于历年真题、各大博客以及相关书籍,方便大家集中式学习(持续更新中)。1 运行下面C++代码,输出是什么?class A{}; class B{public: B() {} ~B() {}}; class C{public: C() {} virtual ~C() {}}; in
2015-07-27 11:47:09
947
转载 计算机操作系统---处理机(进程)管理
在传统的多道程序系统中,处理机的分配和运行,都是以进程为基本单位,因而对处理机的管理,可归结为对进程管理,对进程的管理主要有包括:进程控制、进程同步、进程通信、进程调度。一、进程的基本概念1、程序的执行方式 顺序执行的特征为:顺序性、封闭性(程序运行时独占全机资源,其执行结果不受外界影响)、可再现性(只要运行环境和初始条件相同,程序重复执行都获得相同结果); 并
2015-07-25 15:58:03
3249
原创 程序员笔试面试系列-网络与通信知识点
无论面试什么样的程序语言,计算机网络与通信的相关基础知识是必须储备的。本文即从理论的角度对网络与通信重要知识点进行归纳与整理,希望对大家有所帮助。1 OSI/RM 参考模型(1) 物理层(physical layer)物理层定义了为建立、维护和拆除物理链路所需的机械的、电气的、功能的和规程的特性,其作用是使原始的数据比特流能在物理媒体上传输。物理层的网络设备有:集线器
2015-07-25 12:34:29
1160
转载 C++ 智能指针详解
C++ 智能指针详解 一、简介由于 C++ 语言没有自动内存回收机制,程序员每次 new 出来的内存都要手动 delete。程序员忘记 delete,流程太复杂,最终导致没有 delete,异常导致程序过早退出,没有执行 delete 的情况并不罕见。用智能指针便可以有效缓解这类问题,本文主要讲解参见的智能指针的用法。包括:std::auto_ptr、boost::scoped_p
2015-07-24 11:40:56
398
转载 OSI七层模式简单通俗理解
这个模型学了好多次,总是记不住。今天又看了一遍,发现用历史推演的角度去看问题会更有逻辑,更好记。本文不一定严谨,可能有错漏,主要是抛砖引玉,帮助记性不好的人。总体来说,OSI模型是从底层往上层发展出来的。 这个模型推出的最开始,是是因为美国人有两台机器之间进行通信的需求。需求1:科学家要解决的第一个问题是,两个硬件之间怎么通信。具体就是一台发些比特流,然后另一台能收到。于是,科
2015-07-18 11:12:28
954
转载 NET+AE开发中常见几种非托管对象的释放
我们知道.Net中对于内存的管理有两种方式,一种是托管对象管理,另一种是非托管对象管理。而我们通常理解的内存管理就是GC(垃圾收集),虽然GC通过对托管堆的管理,可以使我们有机会从繁锁的诸如内存泄漏之类的问题中解放出来,可以将精力专注于程序的逻辑上。但是将所有的事情都交给GC有时会损及程序的效率,严重的甚至会导致错误。为什么会出现这种情况呢?问题在于对非托管资源(文件句柄)或者需要特别关照
2014-05-29 11:47:51
1108
原创 等高线回放水平偏差计算方法 Python
import arcpyimport osarcpy.env.overwriteOutput=TrueTable=arcpy.env.scratchGDBa=arcpy.GetParameterAsText(0)a1=arcpy.GetParameterAsText(1)b=arcpy.en
2014-03-14 21:11:46
1716
igraph-0.8.0-msvc.zip
2020-02-21
字符串统计
2015-07-23
arcpy 读取表 转成HTML
2014-02-13
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人