程序员必看视频之-基于原则的发明( 二 )


在这里 , 我有这个for循环 , 我要数到十六 , 在每个分支上都放十六朵小粉红花 。 而且我可以将其调低以获得更少的花朵 , 或者将其调高以获得更多的花朵 。 但是 , 看看我在这里做什么:我只是将数字上下移动了大约20个左右;并且它具有这种非常有趣的闪烁效果;看起来好像风在吹过树 。 第一次看到这一点时 , 我立即开始考虑如何将这种效果用于动画 。 如果必须在每次更改之间进行编译和运行 , 我怎么会发现呢?如此多的艺术 , 那么多的创造就是发现 , 如果看不到自己在做什么 , 就什么也找不到 。
因此 , 我展示了如何调整代码 , 让我们添加一些代码 。 我想在天空中晒太阳 , 所以我要到drawSky函数的末尾 , 并且我想填充一个圆圈 , 所以我开始输入context.fillCircle , 开始输入时 , 我会得到此自动完成列表 , 其中列出了不同的填充方法 。 这些就是我可以在其中键入的内容:fillCircle , fillRect , fillText 。 当我在此自动完成列表中上下移动时 , 我立即看到他们在做什么 。 因此 , 我不必从方法名称中想象它会做什么 。 我不必查看文档 , 只需立即查看即可 。
所以我想要一个圆 , 然后我将调整x坐标和y坐标 , 稍微改变半径 。 看起来不错 。 可能应该是黄色的 , 所以我将设置填充样式context.fillStyle , 与以前一样自动完成 , 选择fillStyle , 默认情况下给我白色 , 并且我可以像更改任何数字一样更改颜色代码 , 我按下控制键 , 然后得到一个调色板 。 所以我可以选择适合自己的太阳的黄色 。 尽管 , 白色还是很有趣 , 我想 。 我有点没想到 。 但是 , 有了白色 , 现在看起来像月亮 , 对吗?嘿 , 这是晚上的时间!因此 , 有了这种直接的联系 , 就可以以前所未有的方式浮现和发展思想 。
但是 , 我认为这里仍然存在问题 , 那就是我已经有了这张照片 , 并且在这里获得了这段代码 , 我必须在脑海中维护两者之间的映射 。 因此 , 我拥有所有这些代码行 , 仅查看这一行 , 我就不会立即知道它的作用 。 所以这就是我能做的 。 我可以按住Option键 , 然后光标变成一个放大镜 , 现在当我在每一行代码上滚动时 , 它会高亮显示图片中该行的内容 。 因此 , 如果我想知道此函数的功能 , 只需滚动该函数并查看突出显示的内容即可 。 因此 , 在这里我有两个山的 。 我不知道哪个是哪个 。 好 , 那是那座山 , 那是那座山 。 这也必须以其他方式起作用 。 如果看到图片的一部分 , 则必须知道是由什么代码绘制的 。 所以我做同样的事情;我按住选项键 , 现在当我在图片的每个像素上移动时 , 会在右侧看到它正在跳转到绘制该像素的代码行 。 这样就聚焦了天空 , 又聚焦了树 , 也聚焦了花朵 。 因此 , 这对于维护该映射确实很重要 , 但是对于四处导航也非常有用 。 所以你知道 , 我想让太阳更大一点;我跳到那里 , 把它弄大一点 。 或者我想把树抬起来一点;我跳到那里 , 把树稍抬起来 。 我想稍微抬起山峰 , 所以我跳到那里 , 稍微抬起山峰;而且我可以按照自己的想法尽快进行这些更改 , 这对于创作过程非常重要 。 能够尝试您想到的想法 。 如果在思考和看到某事物之间以及在此事物之上建立反馈循环有任何延迟 , 那么整个思想世界将永远不会存在 。 这些是我们无法想到的想法 。
想法对我来说很重要 。 关于想法的事情是“想法从小开始” 。 想法始于微小 , 非常脆弱 。 为了发展和成熟 , 创意需要一个创造者可以培育它们的环境 。 要照顾好他们 , 养活他们 , 并塑造他们的成长 。 对我来说 , 这就是直接联系的原则 。 而且因为想法对我来说是如此珍贵 , 当我看到违反这一原则时 , 当我看到想法死了或因他们的创作者看不到他们在做什么而被阻碍时 , 我觉得这是错误的 。 违反某些UI准则或违反某些最佳做法并不是错 , 但是从更深的意义上说是错的 。 我将回到这一点 , 但是我想向您展示遵循该原理的另一个示例 。
程序员必看视频之-基于原则的发明文章插图
因此 , 在此代码中 , 没有状态 , 没有持久状态 , 没有时间 , 没有交互性 。 我当时正在考虑如何以符合我所遵循的这些原则的方式来处理编码的这些方面:创作者需要直接的联系 。 所以我在这里有一个小平台游戏 。 这是我的小家伙 , 他可以跑来跑去 , 他可以跳跃 , 他可以死 。 他的代码在这里 。 因此 , 这段代码使他四处奔走 , 使他跳起来 , 使他与事物碰撞……在这里 , 我有一些关于这只小乌龟的代码 。 乌龟现在做的不多 , 因为我还没有完成编写他的?代码 , 所以 , 我现在就要做 。 说出每个刻度 , 他的x位置加上方向等于时间间隔 , 等于某个速度的六分之一秒 , 嗯 , 我不知道吗?可能快 , 可能慢 , 如果为负 , 他会向后走 。 这些都是我可以用于其他敌人的想法 , 但是我认为海龟应该很慢 , 所以让我们为海龟设置该速度 。 在这里 , 我有一些代码说 , 当我的家伙与乌龟碰撞时 , 他获得了一些Y速度 , 因此他弹跳到空中 , 乌龟被踩了 。 看起来像那样 。 然后乌龟站起来 。