punya(DXプニャリン競争)是用DxRuby实现的一个小游戏。
see also:
http://www20.atpages.jp/papihime/
http://www20.atpages.jp/papihime/ruby/index.htm
下面是我的学习笔记。
一、场景模块(DXRuby的场景框架):
1. 类
(1) Scene::Exit
退出场景类,空类,表示场景为空(见Scene.main_loop)
(2) Scene::Base
抽象类,Scene.main_loop的第一参数
2. 方法
(1) Scene::Base#initialize
构造函数。清空下一场景;帧数设为0;调用init。
(2) Scene::Base#__update
帧数加一,调用update。
(3) Scene::Base#init
抽象方法。初始化事件。
(4) Scene::Base#quit
抽象方法。退出场景并且将要进入下一个场景时的事件。
(5) Scene::Base#update
抽象方法。逻辑更新或场景切换事件。
(6) Scene::Base#render
抽象方法。界面渲染事件,发生在update后。
(7) Scene.main_loop(scene_class, fps = 60, step = 1)
静态方法。
* scene_class是Scene的子类,这里的作用相当于模板参数(实际是传入类构造器);
* fps是窗口最初的指定帧率。
* step是默认fps倍数(在运行期间可按PGUP和PGDN键调节),表示在一个循环内执行多少次渲染和逻辑更新。当它放大时窗口的fps随之缩小,使每秒执行的次数保持相同。
作用:
1) 构造出最开始的scene
2) 按PGUP和PGDN键调节更新内循环数。
3) 调用Scene.Base的回调方法
4) 判断scene.next_scene,如果非空的话构造新的scene读写。
5) 按ESCAPE键退出窗口循环
3. 属性:
(1) Scene::Base#next_scene
可读写。Scene.Base类的子类的类构造器。等于Scene.Exit的话退出。
(2) Scene::Base#frame_counter
只读。从最开始到目前为止的update次数,在update前加一。用于实现场景的透明度和闪烁动画。
4. 出现过的DxRuby API
* Window.loop
窗口循环
* Window.fps
设置窗口帧率
* Input.keyPush?
键盘当前是否按下状态?
二、dx_punya模块(游戏实现)
1. 类
(1) LogoStart
logo,Scene::Base的子类
(2) TitleScene
标题,Scene::Base的子类
(3) MenuScene
菜单,Scene::Base的子类
(4) CharactersScene
帮助与说明,Scene::Base的子类
(5) Punya
每个角色实例的设置
(6) PunyaRaceScene
游戏主界面。
2. 主入口
Scene.main_loop LogoStart
从LogoStart场景开始进入Scene框架主循环
3. 各个类的方法和字段
* LogoStart#FADE_IN_TIME:动画总时间
* LogoStart#init
* LogoStart#go_next_scene
* LogoStart#update
* LogoStart#render
1) 把frame_counter作为定时器参照修改images/logo2.png的显示透明度(渐现后渐隐)
2) 到达FADE_IN_TIME时间后转至下一个场景TitleScene
* TitleScene#init
* TitleScene#go_next_scene
* TitleScene#update
* TitleScene#render
1) 把frame_counter作为定时器参照修改背景图images/bg_title.png的显示透明度(渐现)
2) 提示文字images/press_any_key.png闪烁显示(某些时候不显示)
* MenuScene#init
* MenuScene#go_next_scene
* MenuScene#update
* MenuScene#hit_img?(img):鼠标当前位置是否落在某个菜单图片上。
* MenuScene#render
1) 背景由30个images/menu_tile.png砖块数组组成
2) 标题文字为images/menu_title.png
3) 菜单图片(选择)为images/menu#{i}.png,共三个
4) 菜单图片(未选择)为images/menu#{i}_back.png,共三个
5) 菜单(选择,未选择)信息数组有三个条目:
选择数组(img[])条目为[x坐标, y坐标, 菜单图片,是否当前选择]
未选择数组(img_back[])条目为[x坐标, y坐标, 菜单图片]
6) 按空格或鼠标左键时跳转场景。
根据@cursol_id的值选择跳转到:
PunyaRaceScene,CharactersScene,TitleScene
7) 根据鼠标当前所在位置判断选择哪个菜单
是否落在菜单数组条目,
根据img[0],img[1],image[2].width,image[2].height来判断。
8) 分别绘画
@bg_tiles:循环平铺,根据frame_counter进行偏移(不超过e.width)
形成倾斜方向的运动动画。
@back_menus:循环3次绘画。
@menus:如果@menus[i][3]为1时才绘画。
@title:绘画标题。
* CharactersScene#init
* CharactersScene#go_next_scene
* CharactersScene#update
* CharactersScene#render
1) 渐现背景图images/bg_characters.png(alpha随frame_counter而增加)
2) 空格或鼠标左键跳转到下一个场景MenuScene
* Punya#initialize(idx)
* Punya#update(frame_counter):由PunyaRaceScene场景类的update方法调用
* Punya#goal?:此精灵角色是否到达终点
* Punya#render:由PunyaRaceScene场景类的render方法调用
1) 构造函数传入角色编号idx
加载images/punya#{idx}.png的6张子图片(3*2)(动画精灵图片)。
根据idx算出@x, @y
@move为0,指示@image数组的下标(动画精灵的当前帧数)
2) 根据@x和@y绘画图片@image[@move]
3) 根据frame_counter,在合适的时候增加@i。
4) 根据@i切换精灵的帧图片:
到达终点:@move修改为3->4->5->4->...
未到达终点:@move修改为0->1->2->0->...
5) 根据@i移动精灵
到达终点:不动
未到达终点:@x += rand(4)
6) 精灵的@x超过560时认为到达终点
* PunyaRaceScene#init
* PunyaRaceScene#go_next_scene
* PunyaRaceScene#update
* PunyaRaceScene#render
1) 绘画背景图images/bg_race.png
2) 创建6个Punya精灵
3) 调用精灵的update和render方法
4) 空格或左键跳转到下一个场景MenuScene
4. 出现过的DxRuby API
* Image.load
加载图片
* Input.keyPush?
判断键盘是否按下
* Input.mousePush?
判断鼠标是否按下
* Window.drawAlpha
绘画图片到指定坐标,改变其透明度实现渐隐和渐现。
* Window.draw
绘画图片到指定坐标,可以实现闪烁(显示或不显示)
* Input.mousePosX
鼠标当前所在的X坐标
* Input.mousePosY
鼠标当前所在的Y坐标
* Image.loadToArray
加载一张图片并分割成m * n个对象后返回
三、总结和值得借鉴的内容
1. MenuScene和Punya的实现比较复杂,需要重点分析。
2. 学习如何用滴答数实现透明度动画、闪烁动画、砖块平移动画以及精灵动画。
3. 学习如何实现菜单按钮(选择和未选择)。
分享到:
相关推荐
我们提供此代码供参考,以及希望操作自己的Punya实例和/或为该项目做出贡献的有经验的人。 该代码已经过测试,可以与Java 8一起使用。 贡献者 在App Inventor中集成更改的最佳方法是在就您打算更改或添加的内容...
2. **PHP编程**:学习PHP的基础语法,如何创建和组织PHP项目,以及如何利用PHP框架提高开发效率和代码质量。 3. **Web开发最佳实践**:包括使用版本控制系统(如Git)进行代码管理,以及持续集成/持续部署(CI/CD)...
麻省理工学院Punya教程该存储库包含MIT Punya系统的教程。 教程主要是用Markdown编写的,应与支持资产一起放置在tutorials目录下。 通过将URL放在Screen1的TutorialURL属性中,可以在项目模板中指定教程。 例如,RDF...
储存库punya Fathur untuk resolusi ke masa depan。 1.你好Github 我叫Muhammad Fathur Nur Rizky。您可以叫我Fathur(我是Web开发人员),我来自泗水(印度尼西亚)。而且我还是学生,试图找出我写的关于自己的...
我的http://www.apkbaru.net项目
【标题】"Childe:Bot Bucinan Hasil Kegabutan" 指的可能是一个基于Python开发的聊天机器人...在"Bot bucinan hasil kegabutan"这个项目中,我们可以推测开发者在实验和学习过程中,逐步完善了机器人的功能和用户体验。
笔记 不要出售/购买脚本,对于您的长期用户,此脚本是100%免费的 准备工具和材料。 > niat > 2 handphone (1 buat jalanin sc, 1 buat scan kode qr) > jaringan internet kenceng,kuota+ > penyimpanan yang ...
TPACK(技术、内容、教学法知识)是由Punya Mishra和Matthew J. Koehler两位教授于2005年提出的概念,它强调了教师需要具备的三种核心知识:学科知识(C)、教学法知识(P)和信息技术知识(T)。这三个方面不是孤立...
教师需要不断学习最新的教育理论和技术,以便更好地应用到教学实践中去。对于新手教师而言,将理论知识转化为实践性知识是一个从理论到实践的过程;而对于资深教师,则更多是从实践中提炼出新的理论知识。 ##### ...
Turbo码是由Claude Berrou、Alain Glavieux和Punya Thitimajshima三位学者在1993年提出的一种接近香农极限的纠错编码技术。根据文献的描述,Turbo码是由两个递归系统卷积码(Recursive Systematic Convolutional ...
Turbo码是一种高效的错误校正编码技术,由Claude Berrou、Alain Glavieux和Punya Thitimajshima三位学者于1993年首次提出。这项技术因其卓越的性能而迅速成为通信领域的一个里程碑。本文将对原论文《NEAR SHANNON ...
AQIP BOT BOT WHATSAPP TERMUX仅由穆罕默德·阿基普(Muhammad Aqip) ... > kalo lu belum punya apk termux, download di playstore > masuk ke apk termux lalu ketik dibawah ini ! > termux-setu
BARANG SIAPA YANG NYOLONG TERUS GAK NGASIH WM DAN NGAKU PUNYA DIA,PERCAYALAH SAYA IKHLAS SAJA SEMOGA BERKAH
:alien_monster: 兰斯 :alien_monster: 仅通过ARIS187 ID来BOT WHATSAPP TERMUX阿拉丹巴汉Siapin ... > kalo lu belum punya apk termux, download di playstore> masuk ke apk termux lalu ketik dibawah ini !> te
文件特征全面的Telegram Bot API 5.1支持(进展) 命令处理程序(原型) Apa selanjutnya,punya ide hebat吗? 在这里提交概述// ScriptProperties.setProperty("BOT_TOKEN", 'xxxxxx:xxxxxxxxxxxxxxxxxxxxxxxxxxx'...
Jika kedepannya yang punya脚本meminta saya untuk mematikan脚本ini,maka saya akan mematikan脚本ini。 脚本ini 100%免费。 支持语言:Deutsch,English,Français,español,italiano,polski,português (Brasil)...
非官方 1Cak API 对我们所有人来说都是好消息,现在 1Cak 有一个 API :D 特征 获取每个部分的帖子 ...范围 范围 描述 需要部分 有4个部分,lol( Hot ),趋势( Trending ),... "title":"Bangga Punya Walikota Sepe
机器人 BOT WHATSAPP RIDHO 忠诚 HP 工具和材料 准备工具和材料。 > niat > 2 handphone (1 buat ... > kalo lu belum punya apk termux, download di playstore > masuk ke apk termux lalu ketik dibawah ini ! > g
Bebasin dapat membantu和一个untuk绕过semua konten网站yang diblokir Internet Positif melalui。Saya Punya Pertanyaan Silahkan baca terlebih dahulu。潘当星卡 terlebih dahulu。 解压缩programnya。 Yang ...
下载VM Pada链接berikut Selesaikan散文显示了杨安达和旁雅。 下载VDI pada链接berikut Buat VM Baru Pada VM Yang Anda punya Tentukan名称,机器文件夹,类型dan版本。 Untuk类型的Pilih Linux Dan untuk版本的...