Pascal游戏开发入门(二):渲染图片

渲染静态图片

新增一个Texture,然后Render出来
创建Texture,并获取尺寸

procedure TGame.Init(title: string; x, y, h, w, flags: integer);
begin.....pt := IMG_LoadTexture(pr, 'assets/run.png');SDL_QueryTexture(pt, nil, nil, @srcRect.w, @srcRect.h);destRect.x := srcRect.x;destRect.y := srcRect.y;destRect.w := srcRect.w;destRect.h := srcRect.h;......
end;

渲染出来

procedure TGame.Render();
beginSDL_SetRenderDrawColor(pr, 238, 238, 238, 255);SDL_RenderClear(pr);SDL_RenderCopy(pr, pt, @srcRect, @destRect);SDL_RenderPresent(pr);
end;

渲染动画

渲染动画就就快速交替渲染多张图片

procedure TGame.Update();
beginsrcRect.x := 96 * (round(SDL_GetTicks() / 100) mod 8);
end;

动画反转

本例中,如果人物需要朝相反方向行走,不用再搞一套素材

SDL_RenderCopyEx(pr, pt, @srcRect, @destRect,0, nil, SDL_FLIP_HORIZONTAL);

代码整理

代码味道

  • Texture有多个,不能简单的使用变量。要有一个Texture容器
  • 渲染时的Rect要和Texture的Render在一起防止错乱

新增一个TextureManager来统一的管理Texture,并解决以上两个问题

typeTTextureDict = specialize TFPGMap<string, PSDL_Texture>;TTextureManager = classprivatetextureMap: TTextureDict;publicdestructor Destroy();function Load(filename: string; id: string; pr: PSDL_Renderer): boolean;procedure Draw(id: string; x, y, w, h: integer; pr: PSDL_Renderer;flip: integer = 0);procedure DrawFrame(id: string; x, y, w, h, row, frame: integer;pr: PSDL_Renderer; flip: integer = 0);end;

由于多个TextureManager是不合适的 所以改为单例模式

private
constructor Init;
publicclass function Instance: TTextureManager;

完整代码见 https://gitee.com/tom-cat/sdl-hello/tree/v2.0/

Pascal游戏开发入门(二):渲染图片相关推荐

  1. java游戏开发入门(二) - 菜单

    java游戏开发入门(二) - 菜单 前言 编码 主菜单 游戏内菜单(按下ESC后出现,并会暂停游戏) 效果展示 主菜单 游戏内菜单 完整代码 完整项目 前言   上一章我们创建了一个600x600的 ...

  2. Pascal游戏开发入门(三):游戏对象管理

    Pascal游戏开发入门(三):游戏对象管理 游戏中有很多类对象,例如:角色,敌人,NPC,陷阱,子弹,门等等.跟踪并处理它们之间的交互是一个有难度的事情.为了尽可能简化并使之容易维护,本节将尝试使用 ...

  3. 游戏开发入门 二、游戏中的设计模式

    笔记与总结: 1.有必要深刻的认识到设计模式的意义         游戏开发是一个软件工程,他的特点是需求极易变化.对于任何一个软件工程,我们要从代码的组织方式上来提高其可读性(别人也很容易理解),安 ...

  4. 微信小游戏开发入门(二)-用CocosCreator官方Demo生成微信小游戏

    微信已经放出小游戏的开发工具包,虽然功能尚未完善,但已经可以开发调试了.我们使用CocosCreator官方的polished_project例子来讲解如何生成微信小游戏. 1.下载polished_ ...

  5. 游戏开发入门(二)游戏开发概述

    这篇文章主要以问题的形式给大家解答下面几个问题: 1.游戏是如何开发出来的,开发流程大概是什么样子的? 2.游戏相关的职位都有哪些? 3.开发游戏需要哪些技术或能力? 4.程序员一般负责的内容有哪些? ...

  6. 游戏开发入门(二)游戏中的设计模式

    视频链接:游戏开发入门(二)游戏中的设计模式(3节课 时常:约2小时40分钟) 该视频主要围绕游戏中常见的设计模式展开讲解并实践,需要大家多多实践与理解 笔记与总结(请先学习视频内容): 1.有必要深 ...

  7. 游戏开发入门(十二)游戏开发全总结

    通过游戏开发入门系列的学习,是不是对游戏开发有了一个比较清晰的认识? 在最后一篇里面,博主试着概括性的对游戏开发做一个总结,欢迎各位提出意见来完善这篇博客~ 游戏模块总结: 游戏逻辑模块系统:各种武器 ...

  8. 游戏开发入门(五)游戏动画系统

    视频链接:游戏开发入门(五)游戏动画系统(8节课 时常:约2小时30分钟) PPT比视频要块一些 第二节与PPT对不上 视频中杂音太大,如果带耳机还听不清的话,建议直接看内容即可 笔记与总结(请先学习 ...

  9. 【Visual C++】游戏开发笔记二十三 游戏基础物理建模 五 粒子系统模拟 二

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 本系列文 ...

最新文章

  1. Android-应用性能测试
  2. 第一阶段:Java基础之OOP
  3. mfc exe 在繁体系统 乱码_MC32/MC92 自带TelnetCE界面部分字符乱码解决方案
  4. xamarin.android 控件,Android 库控件 - Xamarin | Microsoft Docs
  5. java 并发锁_Java并发教程–锁定:内在锁
  6. leetcode 删除链表中的节点
  7. 常用linux terminal 命令
  8. 云小课|网络好不好,ping一下就知道
  9. php 远程图片大小,PHP下载远程图片并保存到本地方法总结
  10. linux 切换pip路径_windows环境下面如何快速配置pip环境变量
  11. 次世代的会话管理项目 Spring Session
  12. java sax解析器_Java SAX解析器示例
  13. [转]C++日志系统log4cxx使用总结
  14. ./configure: error: the HTTP rewrite module requires the PCRE library.
  15. uva11549Calculator Conundrum
  16. stm32矩阵键盘c语言程序,stm32矩阵键盘原理图及程序介绍
  17. RTF转HTML(<div>标签)格式的方法(java)
  18. 互联网晚报 | 1月4日 星期二 | 中国移动1月5日在上交所上市;元旦档总票房破10亿;特斯拉连续6个季度交付量创纪录...
  19. 微信小程序商城源码学习
  20. EPLAN 接线端子

热门文章

  1. TorontoCity:众生观天下
  2. c语言中文拼音排序,为sqlite增加汉字拼音排序功能
  3. 计算机组成原理——8086 CPU寄存器
  4. 一定要注意网站图片版权问题!
  5. AcWing每日一题 3565.完美矩阵(绝对值不等式)
  6. 含冰蓄冷空调的冷热电联供型微网多时间尺度优化调度(Matlab代码实现)
  7. linux安装网卡驱动教程6,CentOS 6.5安装无线网卡驱动教程
  8. 【雅思】雅思备考教材推荐--个人收集汇总
  9. 程序员可选择的个博客论坛网站
  10. chrome审查元素功能