今天整理邮件时,偶然发现了我在二十多年前,上小学时写的一个类似《小蜜蜂》的游戏,大概是小学五年级或者六年级,用的 QBasic。
因为我没有配置 QBasic 的环境,所以也不确定还能不能用。但看这个程序,真的恍如隔世。
1 | DECLARE SUB Initialize () |
的无聊生活
今天整理邮件时,偶然发现了我在二十多年前,上小学时写的一个类似《小蜜蜂》的游戏,大概是小学五年级或者六年级,用的 QBasic。
因为我没有配置 QBasic 的环境,所以也不确定还能不能用。但看这个程序,真的恍如隔世。
1 | DECLARE SUB Initialize () |
最近有个强烈的心得体会,独立游戏开发者必须要同时做策划和程序两件事,很容易出现的情况是,策划推进10%,然后程序再推进10%,之后重复这个过程,看似两条线在并行。
但是,这种开发模式有严重的问题,很容易导致返工。因为两边都可能考虑的不够完善,可能你策划到后期才发现程序给你挖了一个巨大的坑,之后就要来回返工。
最科学的开发方式应该是先铆钉策划或者程序,把任何一项的进度推进到90%以上,再去碰另外一件事。
我有个书稿需要解决《A》(B)结构里,把B斜体的问题,一个一个改实在太麻烦了,所以写了个 Python 解决这个问题。
python-docx 库其实很粗糙,改不了所有的地方,甚至还会把字体弄乱了。但是实测大概可以改掉70%,已经极大程度减小工作量了 …… 至于字体和结构乱了重排一下就好。
1 | from docx import Document |
AudioSource.isPlaying 只要程序失焦就会生效,同时也有可能莫名其妙触发,我这几天发现无规则触发了好多次。比较确定的是禁用 AudioSource 组件后,再启用,之后 isPlaying 的判断就会出问题,至于什么原理就不清楚了。
比较安全的方法是通过将当前时间与开始播放时的时间戳相减,你可以得到音频播放了多长时间。然后,将这个播放时长与音频剪辑的总时长(AudioClip.length)比较。如果播放时长小于音频总时长,那么可以认为音频仍在播放中。
代码大概如下:
1 | public class AudioSourceTimeChecker : MonoBehaviour |
我有个全是 index 的 pdf 文件,要把里面 index 内容提取出来,然后存成 Excel 文件,同时还要删除原有的页码。
规则是:每行第一个逗号前的所有内容都保留,第一个逗号后的内容如果是英文单词也保留,如果是数字就删除,之后所有逗号后面的内容都删除。
1 | import pdfplumber |
今天有个奇怪的尝试,打算实现一下让场景里一张图片直接转换成为黑白的效果,首先想到的是使用 Shader。
1 | Shader "Custom/GrayscaleShader" |
创建一个新的Material,并将新创建的Shader赋给这个Material。在你的场景中,找到想要转换为黑白的SpriteRenderer,并将这个新创建的Material赋给它们。
但是操作起来太麻烦了,于是尝试了一种纯粹使用代码完成的思路:
1 | using UnityEngine; |
原理是,复制Sprite的原始纹理,然后对这个复制品的每个像素应用灰度转换。当然这种方法的效率非常低。
之后又改进了一下代码,可以实现渐变为黑白的效果:
1 | using System.Collections; |
最后测试了一下,转换为黑白的效果有点没必要,虽然代码写了,但最后没用 ……
今天想实现一下Unity中的相机抖动,又不想因为这么小的一个功能去找个插件,所以写了个很简单的代码实现:
1 | using System.Collections; |
把这段代码挂载在Camera上,之后在其他的脚本里使用下面方法调用就可以:
1 |
|
Char 是一个我的摸鱼游戏。
有一个冷门的需求,我需要把一个字体的 ttf 文件里的每个英文字母都导出成为一个单独的图片。依然是使用 Python 写了个程序解决:
1 | from PIL import Image, ImageDraw, ImageFont |
Python 有一个名为 markdown 的库就可以处理这个问题,代码如下:
1 | import markdown |
然后用下面代码执行就可以:
1 | python md_to_html.py example.md example.html |
其实绝大多数的 Markdown 文件,都可以用正则表达式手写完成:
1 | import re |
今天学到了一个看似很常见,但是我以前没写过的东西,就是case穿透。我以前一直以为 C# 不能这么写(好像还是在书上之类的地方看到的),今天尝试了一下发现居然没问题。
1 | switch (number) |
也就是一直遇到 break 以后,case 才会停止执行。