<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>阿珏酱のBlog</title>
    <link>https://zh.moejue.cn/</link>
    <description>Recent content from 阿珏酱のBlog</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    
    <managingEditor>xxx@example.com (MoeJue)</managingEditor>
    <webMaster>xxx@example.com (MoeJue)</webMaster>
    
    <copyright>本博客所有文章除特别声明外，均采用 BY-NC-SA 许可协议。转载请注明出处！</copyright>
    
    <lastBuildDate>Sat, 19 Sep 2026 00:01:17 +0000</lastBuildDate>
    
    
    <atom:link href="https://zh.moejue.cn/index.xml" rel="self" type="application/rss&#43;xml" />
    

    
    

    <item>
      <title>【进行中】阿珏Blog十周年特别纪念活动</title>
      <link>https://zh.moejue.cn/posts/352/</link>
      <pubDate>Sat, 19 Sep 2026 00:01:17 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/352/</guid>
      <description>
        <![CDATA[<h1>【进行中】阿珏Blog十周年特别纪念活动</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>不知不觉，十年了。</p>
<p>那年的今日,我买了一个域名,租了个虚拟主机,部署了一套博客系统,发表了第一篇文章.</p>
<p>就从那时开始,开始折腾起了这个博客，我大概也没想过，一个博客居然真的能活了十年。</p>
<p>这十年里面换过域名、换过服务器、换过主题，也写过一些现在回头看自己都觉得“这是什么东西”的文章。</p>
<p>当然也断更过。</p>
<p>但不管怎么说，</p>
<p><strong>它真的活到了十周年。</strong></p>
<p>按惯例 <a href="https://moejue.cn/archives/94">【已结束】阿珏Blog三周年特别纪念活动</a>,必然不能这写这一篇文章. ps:这个活动我已经提前好几年就已经开始策划了.</p>
<p>更多的十周年总结部分我准备放到今年的年终总结去,这次就专注哈皮!</p>
<hr>
<h1 id="-十周年特别纪念活动">
<a class="header-anchor" href="#-%e5%8d%81%e5%91%a8%e5%b9%b4%e7%89%b9%e5%88%ab%e7%ba%aa%e5%bf%b5%e6%b4%bb%e5%8a%a8"></a>
🎉 十周年特别纪念活动
</h1><p>这次活动依旧分成两部分：</p>
<p><strong>① 🧩 解密游戏</strong></p>
<pre><code>不要只看页面上显示出来的东西。
链接、图片、文字、源码……
说不定都有用。
</code></pre>
<p><strong>② ✍️十周年文章活动</strong></p>
<pre><code>在自己博客发表一篇任意标题的文章，说出对阿珏的祝福、对阿珏Blog的评价、对阿珏想要说的话，和阿珏经历过的故事等等内容，如果感动到阿珏了呢，那恭喜你哟，中奖啦！
一个人写一篇是一种记录，一群人写下来，就是一段共同的互联网记忆了。
</code></pre>
<h1 id="-活动时间">
<a class="header-anchor" href="#-%e6%b4%bb%e5%8a%a8%e6%97%b6%e9%97%b4"></a>
📅 活动时间
</h1><blockquote>
<p>2026 年 9 月 19 日 – 2026 年 10 月 19 日</p>
</blockquote>
<p>在活动时间内，都可以参加解密游戏和文章活动。</p>
<hr>
<h1 id="兑奖方式">
<a class="header-anchor" href="#%e5%85%91%e5%a5%96%e6%96%b9%e5%bc%8f"></a>
兑奖方式
</h1><ul>
<li>使用兑换码在 <a href="https://moekoe.cn/Product/58">萌音商城</a> 自主下单兑奖</li>
<li>当你中奖时，届时阿珏将通过 <code>moejue@qq.com</code> 发送兑换码到你的评论时所使用的邮箱地址</li>
<li>可选内容，性别、年龄、有无男/女朋友、自拍照、手机型号等，有利于福袋许愿</li>
<li>所有交易方式均为私密方式，不会向任何第三方透露</li>
<li>随机快递包邮，不接受指定</li>
<li>兑换码将在活动结束后正式生效</li>
<li>同一碳基个体仅限一份福袋</li>
<li>奖品会在兑奖后十个自然日内安排寄出</li>
</ul>
<h1 id="活动规则">
<a class="header-anchor" href="#%e6%b4%bb%e5%8a%a8%e8%a7%84%e5%88%99"></a>
活动规则
</h1><ul>
<li>仅限熟人</li>
<li>仅限拥有个人博客的博主</li>
<li>仅限看到这篇文章的人</li>
<li>仅限人品很好的人</li>
<li>仅限很帅的人</li>
<li>仅限很可爱的人</li>
<li>我就是规则！</li>
</ul>
<h1 id="-福袋预览">
<a class="header-anchor" href="#-%e7%a6%8f%e8%a2%8b%e9%a2%84%e8%a7%88"></a>
🎁 福袋预览
</h1><p>手办、公仔、挂件、笔、耳机、卡贴、徽章、明信片、笔记本、扇子、项链、手机贴膜、手绳、戒子、垫子、小抱枕、玩偶、变身棒、ZWB、H漫画、女友、月饼、垃圾、卡片、阿珏酱等内容。</p>
        
        <hr><p>本文2026-09-19首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-09-19</p>]]>
      </description>
      
        <category>谈天说地</category>
      
    </item>
    
    

    <item>
      <title>第十届迷鹿动漫展，我又去漫展了</title>
      <link>https://zh.moejue.cn/posts/350/</link>
      <pubDate>Tue, 08 Sep 2026 10:49:40 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/350/</guid>
      <description>
        <![CDATA[<h1>第十届迷鹿动漫展，我又去漫展了</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>8 月 8 日，又去漫展了。</p>
<p>这次是<strong>第十届迷鹿动漫展</strong>。</p>
<p>最近感觉自己参加漫展已经越来越熟练了，基本就是看到漫展，有时间的话就去。</p>
<p>也没什么特别的目的。</p>
<p>就是想去逛逛，然后顺便拍拍 Cos，看看有没有认识的人。</p>
<p>说白了就是：</p>
<p><strong>趁年轻做点自己喜欢的事情</strong></p>
<hr>
<h2 id="照片">
<a class="header-anchor" href="#%e7%85%a7%e7%89%87"></a>
照片
</h2><p>回家以后当然还是要面对熟悉的环节。</p>
<p>导照片。</p>
<p>然后打开一看：</p>
<p>“怎么这么多？”</p>
<p>开始慢慢筛。</p>
<p>这张留。</p>
<p>那张留。</p>
<p>有些照片自己觉得还不错，就留下来了。</p>
<p>有些虽然拍得一般，但又觉得删掉有点可惜。</p>
<p>最后就变成：</p>
<p><strong>“算了，都留着吧。”</strong><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/ogmqLUgnAoAiP0wAAPABECCWBaInEiMhJAuin~tplv-dy-aweme-images_q75.jpg" alt="图 131"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/oAhAGBappMAtbiTA7iFQCYREwPbAPAu2QxHrI~tplv-dy-aweme-images_q75.jpg" alt="图 133"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/oAUeCAlGl8AoMIQVEALeJEgFBUYAP8Ie7AGXBV~tplv-dy-aweme-images_q75.jpg" alt="图 134"></p>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/osNWAMijGxL042BAipAoZNaPyACAKIpv7EP2l~tplv-dy-aweme-images_q75.jpg" alt="1"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/oQTqhADcIEEEAEpefAAwQ6AFBqNHiSr7YId9eX~tplv-dy-aweme-images_q75.jpg" alt="图 127"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/oQVI9rAmEEmihIAE7vqAHD0EhI6seeAfwALFC9~tplv-dy-aweme-images_q75.jpg" alt="图 128"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/ogWCAB5EKAiqEbSfAwy9Fe1KXBe6PApliIzEAU~tplv-dy-aweme-images_q75.jpg" alt="图 129"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/oIdIFXT2EDfjKnOcICFEwxQE9A80AkdfAACqAn~tplv-dy-aweme-images_q75.jpg" alt="图 130"></p>
<p>修完以后再慢慢发社交平台。</p>
<p>然后过一段时间再回来看。</p>
<p>估计又会觉得：</p>
<p>“当时怎么不再拍好一点。”</p>
<p>很正常。</p>
<p>下次继续。</p>
<hr>
<h2 id="这次就先记录到这里">
<a class="header-anchor" href="#%e8%bf%99%e6%ac%a1%e5%b0%b1%e5%85%88%e8%ae%b0%e5%bd%95%e5%88%b0%e8%bf%99%e9%87%8c"></a>
这次就先记录到这里
</h2><p>第十届迷鹿动漫展。</p>
<p>又是一次很普通的漫展。</p>
<p>没有什么特别的故事。<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/owAXc7P7DQEwGn0mArFAn09BBCfeqAEIEuwFAk~tplv-dy-aweme-images_q75.jpg" alt="图 135"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/ogBEAAbPiiACWPAwIevBeSz6qWXA5y194EFfEK~tplv-dy-aweme-images_q75.jpg" alt="图 132"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/oIup8xLvLMBAwVwiAPCBpBAviaAwAowMIcEQ4~tplv-dy-aweme-images_q75.jpg" alt="图 136"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/o0DFrCUEAE95AIuEiEFqAJCDwBeAAEUSfShANf~tplv-dy-aweme-images_q75.jpg" alt="图 137"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/09/08/o8tQuRZUApAiPwhAFPAN7bCHBaI2EQMxbAiip~tplv-dy-aweme-images_q75.jpg" alt="图 138"></p>
<p><strong>“哦，2026 年 8 月 8 日，我去过迷鹿。”</strong></p>
<p>这就够了。</p>
<p>下次有漫展的话……</p>
<p><strong>那就继续去。</strong></p>
<p>📷 <strong>阿珏酱 / 漫展随手记录</strong></p>
<p><strong>第十届迷鹿动漫展，完。</strong></p>
        
        <hr><p>本文2026-09-08首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-09-08</p>]]>
      </description>
      
        <category>二次元</category>
      
    </item>
    
    

    <item>
      <title>游中国最美十大海岛之旅——嵛山岛</title>
      <link>https://zh.moejue.cn/posts/347/</link>
      <pubDate>Sat, 22 Aug 2026 13:00:41 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/347/</guid>
      <description>
        <![CDATA[<h1>游中国最美十大海岛之旅——嵛山岛</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>这次旅行，去的是传说中的“中国最美十大海岛”之一,<strong>嵛山岛</strong>。<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0812.jpg" alt="图 111"></p>
<p>出发之前还是挺期待的。<br>
毕竟这种地方，网上随便一搜都是各种大片：蓝蓝的海水、层层叠叠的山、远处的海岛，还有站在山顶一眼望过去的壮阔海景。</p>
<p>结果真正到了以后才发现——</p>
<p><strong>旅行这种东西，真的很看天气。</strong></p>
<hr>
<h2 id="登岛">
<a class="header-anchor" href="#%e7%99%bb%e5%b2%9b"></a>
登岛
</h2><p>刚开始的时候，天气其实还可以。</p>
<p>一路上看看风景，吹吹海风，感觉整个人都慢慢放松下来了。</p>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0815.jpg" alt="图 112"></p>
<p>岛上的风景和城市里完全不一样。</p>
<p>没有那么多高楼，也没有那么嘈杂的声音，视线一下子就开阔了很多。</p>
<p>一路走走停停，看到喜欢的地方就拍拍照片。</p>
<hr>
<h2 id="上山">
<a class="header-anchor" href="#%e4%b8%8a%e5%b1%b1"></a>
上山
</h2><p>在山脚下，天气看起来其实还行。</p>
<p>但是随着海拔越来越高，周围慢慢就开始白了起来。<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0837.jpg" alt="图 113"></p>
<p>远处的山看不清了。</p>
<p>海也看不见了。</p>
<p>甚至走到一些地方的时候，前面十几二十米的东西都开始变得模糊。</p>
<p>一开始还只是有一点雾气，后来直接变成了“雾锁山顶”。</p>
<p>到了山顶之后，远处基本就看不到了,而且那天风还特别的大,呼呼的吹<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0860.jpg" alt="图 124"></p>
<p>本来应该能看到很远的海面，结果全被白茫茫的雾气挡住。</p>
<p>站在那里甚至有一种：<strong>“我是不是来到了云里面？”</strong> 的感觉。</p>
<p>当然，没看到完整的山海全貌，还是有一点遗憾的。</p>
<p>毕竟难得来一次嵛山岛，还是很想亲眼看看网上照片里的那种壮阔海景。</p>
<p>网上那些“站在山顶俯瞰大海”的画面，我是一张都没看到。</p>
<p>这里就是最有名的大天湖和小天湖哈哈</p>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0816.jpg" alt="图 122"><br>
最出片的地方<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0871.jpg" alt="图 123"></p>
<hr>
<h2 id="去海边">
<a class="header-anchor" href="#%e5%8e%bb%e6%b5%b7%e8%be%b9"></a>
去海边
</h2><p>到了海边之后，感觉又完全不一样了。<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0907.jpg" alt="图 116"></p>
<p>海风吹过来，整个人舒服了很多。</p>
<p>相比于山顶的时候，海边更加适合慢慢待着。</p>
<p>没有必要一直赶着去什么景点，也不用一直拿着相机拍。</p>
<p>代画小人,一元一个,童叟无欺<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0911.jpg" alt="图 117"></p>
<hr>
<h2 id="看日落">
<a class="header-anchor" href="#%e7%9c%8b%e6%97%a5%e8%90%bd"></a>
看日落
</h2><p>到了傍晚，我们又准备等日落。</p>
<p>这时候其实已经开始期待了。</p>
<p>想着白天山顶虽然没看到完整的海景，那晚上总得让我看个日落吧？</p>
<p>结果…… <strong>云又来了。</strong><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0928.jpg" alt="图 114"></p>
<p>太阳慢慢往下落的时候，天空已经被云层挡住了。</p>
<p>能看到一点点夕阳的光，但是想象中的那种“太阳落到海平面”的画面，还是没有等到。</p>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0930.jpg" alt="图 115"></p>
<hr>
<h2 id="树荫下">
<a class="header-anchor" href="#%e6%a0%91%e8%8d%ab%e4%b8%8b"></a>
树荫下
</h2><p>岛上有一个炮台酒吧,晚上的时候会有很多年轻人在这唱歌喝酒.<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0938.jpg" alt="图 119"></p>
<p>吹吹海风，聊聊天，看看旁边的海。</p>
<p>那一刻其实特别轻松惬意。</p>
<p>旅行有时候就是这样。</p>
<p>不一定非要去很多地方，也不一定每一分钟都安排得满满当当。</p>
<p>有时候找个树荫坐下来，吹一会儿海风，就已经很放松了。</p>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0948.jpg" alt="图 120"></p>
<p>蓝天白云海风树荫<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/22/IMG_0954.jpg" alt="图 118"></p>
        
        <hr><p>本文2026-08-22首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-08-22</p>]]>
      </description>
      
        <category>谈天说地</category>
      
    </item>
    
    

    <item>
      <title>逛 福州·第十五届潮柚漫展</title>
      <link>https://zh.moejue.cn/posts/345/</link>
      <pubDate>Sun, 16 Aug 2026 15:37:59 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/345/</guid>
      <description>
        <![CDATA[<h1>逛 福州·第十五届潮柚漫展</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>算起来，我去漫展也有一段时间了。</p>
<p>不过如果要问我到底算什么身份……</p>
<p>摄影师？算是吧。</p>
<p>集邮党？也算。</p>
<p>二次元爱好者？这个应该更准确一点。</p>
<p><strong>相机挂着，手机揣着，然后看到好看的 Cos 就走不动路。</strong></p>
<p>这次去的是 <strong>福州·第十五届潮柚次元动漫嘉年华</strong>。</p>
<p>展会在 2026 年 7 月 24 日到 26 日举行，地点还是大家比较熟悉的福州海峡国际会展中心。</p>
<hr>
<h2 id="出发目标拍照--集邮">
<a class="header-anchor" href="#%e5%87%ba%e5%8f%91%e7%9b%ae%e6%a0%87%e6%8b%8d%e7%85%a7--%e9%9b%86%e9%82%ae"></a>
出发，目标：拍照 + 集邮
</h2><p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/16/IMG_20260725_104712.jpg" alt="图 94"></p>
<p><strong>一边拍，一边逛，一边集邮。</strong></p>
<p>你永远不知道下一秒会在场馆哪个角落遇到谁。</p>
<hr>
<h2 id="我的漫展日常">
<a class="header-anchor" href="#%e6%88%91%e7%9a%84%e6%bc%ab%e5%b1%95%e6%97%a5%e5%b8%b8"></a>
我的漫展日常
</h2><p>“老师，可以拍几张吗？”</p>
<p>“老师，可以集个邮吗！”</p>
<p>“谢谢老师！”</p>
<p>“老师，你看一下”</p>
<p>“老师，需要反图吗,加个微信吧”</p>
<p>这句话我感觉已经快变成摄影师的固定台词了。</p>
<hr>
<h2 id="但我其实不只是来拍照的">
<a class="header-anchor" href="#%e4%bd%86%e6%88%91%e5%85%b6%e5%ae%9e%e4%b8%8d%e5%8f%aa%e6%98%af%e6%9d%a5%e6%8b%8d%e7%85%a7%e7%9a%84"></a>
但我其实不只是来拍照的
</h2><p>虽然每次都背着相机，看起来像个摄影师。</p>
<p>但我觉得自己还是更像一个普通的漫展爱好者。</p>
<p>因为我也喜欢集邮。</p>
<p><strong>遇到认识的老师，拍张照；<br>
遇到喜欢的 Cos，拍张照；<br>
遇到以前见过的老师，再拍张照。</strong></p>
<p>有时候甚至不是为了出片。</p>
<p>就是觉得：</p>
<p>“啊，这次又遇到了。”</p>
<p>那就拍一张留个纪念。</p>
<p><img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/16/IMG_20260725_121823.jpg" alt="图 95"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/16/ps1.jpg" alt="图 97"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/16/ps6.jpg" alt="图 100"></p>
<p>我觉得这也是漫展比较有意思的一点。</p>
<p>几年以后再翻回这些照片，你可能已经记不起当天具体发生了什么。</p>
<p>但是看到照片的时候，还是会想起来：</p>
<p><strong>“哦，这个漫展我去过。”</strong></p>
<p>“那天我好像还在这里拍了一整天。”</p>
<p>“当时这个老师还在这里。”</p>
<p>这种感觉其实挺好的。</p>
<hr>
<h2 id="漫展里的各种瞬间">
<a class="header-anchor" href="#%e6%bc%ab%e5%b1%95%e9%87%8c%e7%9a%84%e5%90%84%e7%a7%8d%e7%9e%ac%e9%97%b4"></a>
漫展里的各种瞬间
</h2><p>漫展最让我喜欢的，其实不一定是舞台或者嘉宾。</p>
<p>有时候就是一些很普通的小瞬间。</p>
<p>路边正在整理假发的 Coser。</p>
<p>拿着痛包到处逛的游客。</p>
<p>第一次鼓起勇气找人拍照的人。</p>
<p>还有背着相机、在人群里面到处找角度的摄影师。</p>
<p>这些东西放在一起，才组成了我印象里的漫展。<br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/16/IMG_0328.jpg" alt="图 103"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/16/IMG_0356.jpg" alt="图 104"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/16/IMG_0451.jpg" alt="图 105"><br>
<img src="https://gh-proxy.com/github.com/iAJue/MoeJueBlogPic/blob/master/Images/2026/08/16/IMG_0354.jpg" alt="图 109"></p>
        
        <hr><p>本文2026-08-16首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-08-16</p>]]>
      </description>
      
        <category>二次元</category>
      
    </item>
    
    

    <item>
      <title>MoeKoe Music Mobile酷狗音乐第三方移动端播放器</title>
      <link>https://zh.moejue.cn/posts/342/</link>
      <pubDate>Sat, 01 Aug 2026 13:12:42 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/342/</guid>
      <description>
        <![CDATA[<h1>MoeKoe Music Mobile酷狗音乐第三方移动端播放器</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p><img src="assets/images/icon.png" alt="MoeKoe Music"></p>
<p># MoeKoe Music Mobile</p>
<p>一款开源、简洁、高颜值的第三方酷狗音乐移动端播放器</p>
<p>基于 Expo / React Native 构建，是 [MoeKoeMusic](<a href="https://github.com/iAJue/MoeKoeMusic">https://github.com/iAJue/MoeKoeMusic</a>) 桌面版的移动端实现</p>
<p><a href="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile"><strong>🌎 GitHub仓库</strong></a>  |  <br>
<a href="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/releases"><strong>📦️ 下载安装包</strong></a>  |  <br>
<a href="https://MoeJue.cn"><strong>💬 访问博客</strong></a>  |  <br>
<a href="https://Music.MoeKoe.cn"><strong>🏠 项目主页</strong></a></p>
<p><a href="https://github.com/iAJue"><img src="https://img.shields.io/badge/%F0%9F%8E%89_Create_by_iAJue-with_Love_%E2%9D%A4-pink?style=flat-square" alt=""></a></p>
<p>一款开源、简洁、高颜值的第三方酷狗音乐移动端播放器</p>
<p>基于 Expo / React Native 构建，是 <a href="https://github.com/iAJue/MoeKoeMusic">MoeKoeMusic</a> 桌面版的移动端实现</p>
<p><a href="https://expo.dev/"><img src="https://img.shields.io/badge/Expo-SDK%2057-000020?logo=expo&amp;logoColor=white" alt="Expo SDK"></a> <a href="https://reactnative.dev/"><img src="https://img.shields.io/badge/React%20Native-0.86-61DAFB?logo=react&amp;logoColor=white" alt="React Native"></a> <a href="https://www.typescriptlang.org/"><img src="https://img.shields.io/badge/TypeScript-6.0-3178C6?logo=typescript&amp;logoColor=white" alt="TypeScript"></a> <a href="LICENSE"><img src="https://img.shields.io/badge/License-GPL--2.0-blue.svg" alt="License"></a> <a href=""><img src="https://img.shields.io/badge/Platform-iOS%20%7C%20Android-lightgrey" alt="Platform"></a></p>
<hr>
<h2 id="-特性">
<a class="header-anchor" href="#-%e7%89%b9%e6%80%a7"></a>
✨ 特性
</h2><ul>
<li>🎵 <strong>无需自建服务器</strong> — 酷狗 API 适配层直接直连官方，开箱即用，不依赖外部 API 地址</li>
<li>🏠 <strong>首页推荐</strong> — 每日推荐、精选歌单、排行榜</li>
<li>🧭 <strong>发现页</strong> — 分类歌单、新歌速递等内容探索</li>
<li>🔍 <strong>搜索</strong> — 快速检索歌曲、歌单、专辑</li>
<li>📀 <strong>歌单 / 专辑 / 排行榜</strong> — 完整的详情页与曲目列表</li>
<li>🎧 <strong>播放器</strong> — 滚动歌词、播放队列、迷你播放条（MiniPlayer）、后台播放</li>
<li>🎚️ <strong>音质检测</strong> — 自动探测并选择可用音质</li>
<li>📱 <strong>手机号登录</strong> — 同步酷狗账号的收藏与歌单</li>
<li>🌗 <strong>深色模式</strong> — 跟随系统自动切换明暗主题</li>
</ul>
<h2 id="-todo-list">
<a class="header-anchor" href="#-todo-list"></a>
📝 Todo List
</h2><ul>
<li>[x] 首页每日推荐 / 精选歌单 / 排行榜</li>
<li>[x] 发现页分类内容浏览</li>
<li>[x] 搜索歌曲、歌单、专辑</li>
<li>[x] 歌单 / 专辑 / 排行榜详情页</li>
<li>[x] 播放器：滚动歌词、播放队列、迷你播放条、后台播放</li>
<li>[x] 音质检测与自动选择</li>
<li>[x] 手机号登录</li>
<li>[x] 账号密码登录</li>
<li>[x] 扫码登录(其他设备)</li>
<li>[x] 我喜欢 / 收藏同步</li>
<li>[x] 用户歌单管理（创建 / 收藏 / 编辑）</li>
<li>[ ] 通知栏 / 锁屏播放控制</li>
<li>[ ] 歌曲详情浏览</li>
<li>[ ] 桌面歌词</li>
<li>[ ] 听歌识曲</li>
<li>[ ] 平板与横屏适配</li>
<li>[ ] 性能优化</li>
</ul>
<h2 id="-预览">
<a class="header-anchor" href="#-%e9%a2%84%e8%a7%88"></a>
📸 预览
</h2><table class="table"><tbody><tr><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-1.png" alt="Screenshot 1"></td><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-2.png" alt="Screenshot 2"></td><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-3.png" alt="Screenshot 3"></td></tr><tr><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-4.png" alt="Screenshot 4"></td><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-5.png" alt="Screenshot 5"></td><td><img decoding="async" src="https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile/raw/master/images/screen-6.png" alt="Screenshot 6"></td></tr></tbody></table>
<h2 id="-快速开始">
<a class="header-anchor" href="#-%e5%bf%ab%e9%80%9f%e5%bc%80%e5%a7%8b"></a>
🚀 快速开始
</h2><h3 id="环境要求">
<a class="header-anchor" href="#%e7%8e%af%e5%a2%83%e8%a6%81%e6%b1%82"></a>
环境要求
</h3><ul>
<li><a href="https://nodejs.org/">Node.js</a> ≥ 22</li>
<li><a href="https://git-scm.com/">Git</a></li>
<li>iOS 模拟器 / Android 模拟器，或安装了开发版客户端的真机</li>
</ul>
<h3 id="开发运行">
<a class="header-anchor" href="#%e5%bc%80%e5%8f%91%e8%bf%90%e8%a1%8c"></a>
开发运行
</h3><pre><code># 克隆仓库（包含 api submodule）
git clone --recurse-submodules https://github.com/MoeKoeMusic/MoeKoeMusic-Mobile.git
cd MoeKoeMusic-Mobile

# 安装依赖
npm install
npm --prefix api install

# 生成移动端 API 入口（api/ 更新后需重新执行）
npm run generate:mobile-api

# 启动开发服务器
npx expo start
</code></pre>
<blockquote>
<p>如果克隆时遗漏了 submodule，可执行 <code>git submodule update --init</code> 补齐。</p>
        
        <hr><p>本文2026-08-01首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-08-01</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>MoeKoe Music浏览器插件版本,开箱即用</title>
      <link>https://zh.moejue.cn/posts/339/</link>
      <pubDate>Wed, 15 Jul 2026 17:48:40 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/339/</guid>
      <description>
        <![CDATA[<h1>MoeKoe Music浏览器插件版本,开箱即用</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p><img src="https://github.com/MoeKoeMusic/MoeKoeMusic/raw/main/build/icons/linux/256x256.png" alt="MoeKoe Music"></p>
<h2 id="moekoe-music-extension">
<a class="header-anchor" href="#moekoe-music-extension"></a>
MoeKoe Music Extension
</h2><p>MoeKoe Music 浏览器插件版，基于 <a href="https://github.com/MoeKoeMusic/MoeKoeMusic/">MoeKoeMusic Web</a> 构建，并在浏览器扩展内完成 API 路由兼容。</p>
<p><img src="https://img.shields.io/badge/Manifest-V3-4285F4" alt="Manifest V3"> <img src="https://img.shields.io/badge/Vue-3-42b883" alt="Vue"> <img src="https://img.shields.io/badge/Vite-7-646CFF" alt="Vite"> <img src="https://img.shields.io/badge/License-GPL--2.0-blue" alt="License"></p>
<p><a href="https://github.com/MoeKoeMusic/MoeKoe-Music-Extension">🌎 GitHub仓库</a></p>
<h2 id="特性">
<a class="header-anchor" href="#%e7%89%b9%e6%80%a7"></a>
特性
</h2><ul>
<li>点击浏览器插件图标后打开独立窗口运行 MoeKoeMusic。</li>
<li>无需用户配置 API 地址，也无需额外启动本地 API 服务。</li>
<li>保留 MoeKoeMusic 原有 Web 页面与交互，兼容浏览器扩展运行环境。</li>
</ul>
<h2 id="快速开始">
<a class="header-anchor" href="#%e5%bf%ab%e9%80%9f%e5%bc%80%e5%a7%8b"></a>
快速开始
</h2><h3 id="环境要求">
<a class="header-anchor" href="#%e7%8e%af%e5%a2%83%e8%a6%81%e6%b1%82"></a>
环境要求
</h3><ul>
<li>Node.js 20 或更高版本</li>
<li>Git</li>
<li>Chrome / Edge 等 Chromium 内核浏览器</li>
</ul>
<h3 id="安装依赖">
<a class="header-anchor" href="#%e5%ae%89%e8%a3%85%e4%be%9d%e8%b5%96"></a>
安装依赖
</h3><pre><code>git submodule update --init --recursive
npm install
npm run install:app
</code></pre>
<p><code>npm run install:app</code> 会分别安装 <code>MoeKoeMusic</code> 与 <code>MoeKoeMusic/api</code> 的依赖。安装后建议检查子模块工作区，避免把上游 lockfile 的非预期变化提交进去。</p>
        
        <hr><p>本文2026-07-15首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-07-15</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>MoeKoe Music 插件市场设计</title>
      <link>https://zh.moejue.cn/posts/337/</link>
      <pubDate>Sun, 05 Jul 2026 12:54:29 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/337/</guid>
      <description>
        <![CDATA[<h1>MoeKoe Music 插件市场设计</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>在做插件市场之前，先有的是 MoeKoe 的普通插件系统。</p>
<p>当时我想解决的问题不是某一个具体功能，而是一个更通用的问题：播放器里总会冒出很多小需求，有些人想改界面，有些人想加一个工具弹窗，有些人想接自己的服务。如果每个想法都往主程序里塞，主程序会越来越重，也越来越难维护。</p>
<p>所以我一开始给插件系统定的方向很明确：主程序只提供插件运行环境和管理入口，具体功能交给插件自己做。插件能独立安装、独立卸载，坏了也尽量不要影响播放器本体。</p>
<p>上一篇我写的是 <a href="https://moejue.cn/archives/334" title="&lt;code&gt;MoeKoeMusic-Plugins&lt;/code&gt;">MoeKoeMusic-Plugins</a> 这个插件登记仓库。那边解决的是“插件市场的数据怎么产生”：用户用 Issue 提交，Action 校验，维护者审核，通过后写进 <code>plugins.json</code>。</p>
<p>但光有登记仓库还不够。真正对用户来说，插件市场不是 GitHub 上的一份 JSON，而是客户端里一个能看、能搜、能安装、能更新的入口。<br>
所以这篇就换到 MoeKoe Music 主项目里，专门聊客户端的插件市场部分。</p>
<h2 id="为什么选-chrome-extension-这一套">
<a class="header-anchor" href="#%e4%b8%ba%e4%bb%80%e4%b9%88%e9%80%89-chrome-extension-%e8%bf%99%e4%b8%80%e5%a5%97"></a>
为什么选 Chrome Extension 这一套
</h2><p>MoeKoe 是 Electron 应用，Electron 本身就有加载扩展的能力。既然底层已经能跑 Chrome Extension，那就没必要再从零设计一套插件格式。</p>
<p>这样做有几个好处:</p>
<ul>
<li>第一，插件作者不用学一套完全陌生的格式。<code>manifest.json</code>、<code>popup.html</code>、<code>background.js</code> 都是浏览器扩展里很常见的概念。</li>
<li>第二，插件天然有清单文件。主程序可以先读 <code>manifest.json</code>，判断插件名称、版本、描述、权限、弹窗入口、最低支持版本这些信息。</li>
<li>第三，Electron 可以直接加载插件目录，不需要我自己写一个脚本沙箱。</li>
</ul>
<h2 id="展示搜索分页和状态">
<a class="header-anchor" href="#%e5%b1%95%e7%a4%ba%e6%90%9c%e7%b4%a2%e5%88%86%e9%a1%b5%e5%92%8c%e7%8a%b6%e6%80%81"></a>
展示、搜索、分页和状态
</h2><p>插件市场不是只要能安装就行，还要能快速判断：</p>
<ul>
<li>这个插件是干什么的</li>
<li>我有没有装过</li>
<li>我装的是不是旧版本</li>
<li>这个插件有没有更高版本要求</li>
<li>它有没有联网、文件访问、本地二进制这些风险点</li>
<li>分页,搜索,更新,状态</li>
</ul>
<p>所以市场卡片里展示的不只是“安装”按钮。</p>
<ol>
<li>确保插件目录存在</li>
<li>调用Electron下载安装、卸旧版、装新版</li>
<li>注册插件相关 IPC</li>
<li>加载 Chrome 扩展</li>
<li>加载 Native Host 索引和授权系统</li>
</ol>
<h2 id="已安装插件">
<a class="header-anchor" href="#%e5%b7%b2%e5%ae%89%e8%a3%85%e6%8f%92%e4%bb%b6"></a>
已安装插件
</h2><p>插件管理页里的“已安装插件”不是只读 Electron 当前加载的扩展。它会把两类信息合并：</p>
<ul>
<li><code>session.defaultSession.getAllExtensions()</code> 拿到已加载扩展</li>
<li><code>scanExtensions()</code> 扫描磁盘插件目录，读取 manifest、图标、popup、Native Host 声明</li>
</ul>
<p>前端拿到这些字段后，就能显示：</p>
        
        <hr><p>本文2026-07-05首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-07-05</p>]]>
      </description>
      
        <category>折腾代码</category><category>教程</category>
      
    </item>
    
    

    <item>
      <title>MoeKoeMusic-Plugins设计理念</title>
      <link>https://zh.moejue.cn/posts/334/</link>
      <pubDate>Sat, 20 Jun 2026 11:45:33 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/334/</guid>
      <description>
        <![CDATA[<h1>MoeKoeMusic-Plugins设计理念</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>一开始做 MoeKoe Music 插件生态的时候，还没有在线插件市场这个功能<br>
后来在社区的建议下便有了这个插件市场 <a href="https://github.com/orgs/MoeKoeMusic/discussions/888">增加官方/社区插件仓库以扩展产品功能</a></p>
<blockquote>
<p>插件可以由社区开发，那插件市场应该怎么管？</p>
</blockquote>
<p>最直接的做法当然是把所有插件源码都收进一个大仓库里。但这个方案越想越别扭。每个插件都有自己的作者、自己的发布节奏、自己的构建方式。把它们全塞进官方仓库，不仅维护成本高，也会把责任边界搞得很模糊。</p>
<p>所以这个仓库最后没有被设计成“插件源码仓库”，而是变成了一个“插件登记与索引仓库”。它只做几件事：</p>
<ul>
<li>接收插件上架、更新、下架和举报申请</li>
<li>自动做一轮基础校验和静态识别</li>
<li>把人工审核通过时的插件快照记录下来</li>
<li>维护客户端可以读取的 <code>plugins.json</code></li>
<li>顺手把 README 里的插件列表更新出来，方便人看</li>
</ul>
<p>一个可追溯的登记簿：谁提交的、审核的是哪个版本、下载地址是什么、是否有网络或文件权限，都落在一份清楚的数据里。</p>
<h2 id="市场索引而不是源码仓库">
<a class="header-anchor" href="#%e5%b8%82%e5%9c%ba%e7%b4%a2%e5%bc%95%e8%80%8c%e4%b8%8d%e6%98%af%e6%ba%90%e7%a0%81%e4%bb%93%e5%ba%93"></a>
市场索引，而不是源码仓库
</h2><p>仓库根目录最重要的文件是 <code>plugins.json</code>。它就是插件市场真正消费的数据源。</p>
<pre><code>{
  &quot;id&quot;: &quot;custom-app-background&quot;,
  &quot;name&quot;: &quot;自定义背景图&quot;,
  &quot;description&quot;: &quot;为MoeKoe Music提供自定义背景图能力，支持透明度调节。&quot;,
  &quot;iconUrl&quot;: &quot;...&quot;,
  &quot;version&quot;: &quot;1.0.0&quot;,
  &quot;minversion&quot;: &quot;1.6.1&quot;,
  &quot;...&quot;:&quot;....&quot;,
  &quot;buildRequired&quot;: false,
  &quot;networkAccess&quot;: false,
  &quot;fileAccess&quot;: false,
  &quot;binaryContent&quot;: false,
  &quot;snapshot&quot;: {
    &quot;iconUrl&quot;: &quot;...&quot;,
    &quot;repository&quot;: &quot;MoeKoeMusic/custom-app-background-plugin&quot;,
    &quot;commitSha&quot;: &quot;dbf72d38c8cf6b1d1cefdf8ce15798d565678995&quot;,
    &quot;downloadUrl&quot;: &quot;hxx.zip&quot;,
    &quot;release&quot;: null
  }
}
</code></pre>
<p>我不想让市场记录永远指向插件仓库“当前最新代码”。因为作者今天提交的代码，和审核那天看到的代码，可能已经不是同一份东西了。插件市场真正应该承认的是：审核通过时的那个版本。</p>
<p>所以这个项目里面有一个核心原则：</p>
<blockquote>
<p>上架的不是一个会漂移的仓库地址，而是一个已经锁定的快照。</p>
</blockquote>
<p>对于不需要编译的插件，快照锁到默认分支当时的 commit。对于需要编译的插件，快照锁到对应的 Release tag 和发行附件。这样后面真出了问题，也能回头知道当时到底审核了什么。</p>
<h2 id="action-先跑人最后拍板">
<a class="header-anchor" href="#action-%e5%85%88%e8%b7%91%e4%ba%ba%e6%9c%80%e5%90%8e%e6%8b%8d%e6%9d%bf"></a>
Action 先跑，人最后拍板
</h2><p>用户提交 Issue 时，需要选择：</p>
        
        <hr><p>本文2026-06-20首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-06-20</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>我用WebGL做18&#43;游戏，输了“掉装备”🔞</title>
      <link>https://zh.moejue.cn/posts/332/</link>
      <pubDate>Sat, 13 Jun 2026 11:38:47 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/332/</guid>
      <description>
        <![CDATA[<h1>我用WebGL做18+游戏，输了“掉装备”🔞</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>紧接上文：<a href="https://moejue.cn/archives/328">《同一个动画，我用三种技术栈实现的区别?》</a></p>
<h4 id="webgl-二次元石头剪刀布小游戏">
<a class="header-anchor" href="#webgl-%e4%ba%8c%e6%ac%a1%e5%85%83%e7%9f%b3%e5%a4%b4%e5%89%aa%e5%88%80%e5%b8%83%e5%b0%8f%e6%b8%b8%e6%88%8f"></a>
WebGL 二次元石头剪刀布小游戏。
</h4><p>规则很普通：</p>
<ul>
<li>石头 &gt; 剪刀</li>
<li>剪刀 &gt; 布</li>
<li>布 &gt; 石头</li>
</ul>
<p>但有趣的是在于：</p>
<h4 id="输了会脱衣服">
<a class="header-anchor" href="#%e8%be%93%e4%ba%86%e4%bc%9a%e8%84%b1%e8%a1%a3%e6%9c%8d"></a>
输了会脱衣服。
</h4><p>对,就是这么简单粗暴。</p>
<hr>
<h2 id="起因其实是我想研究精灵图">
<a class="header-anchor" href="#%e8%b5%b7%e5%9b%a0%e5%85%b6%e5%ae%9e%e6%98%af%e6%88%91%e6%83%b3%e7%a0%94%e7%a9%b6%e7%b2%be%e7%81%b5%e5%9b%be"></a>
起因其实是“我想研究精灵图”
</h2><p>一开始我根本没想做游戏。<br>
我只是想研究：</p>
<ul>
<li>atlas</li>
<li>sprite</li>
<li>图层叠加</li>
<li>动画裁剪</li>
</ul>
<p>这些东西。<br>
然后想着：“总得有个实际应用场景吧？”</p>
<p>于是脑子一抽：</p>
<h4 id="那干脆做个二次元脱衣猜拳">
<a class="header-anchor" href="#%e9%82%a3%e5%b9%b2%e8%84%86%e5%81%9a%e4%b8%aa%e4%ba%8c%e6%ac%a1%e5%85%83%e8%84%b1%e8%a1%a3%e7%8c%9c%e6%8b%b3"></a>
那干脆做个二次元脱衣猜拳。
</h4><p>然后项目开始朝奇怪方向狂奔。</p>
<hr>
<h2 id="这个项目最麻烦的其实不是游戏逻辑">
<a class="header-anchor" href="#%e8%bf%99%e4%b8%aa%e9%a1%b9%e7%9b%ae%e6%9c%80%e9%ba%bb%e7%83%a6%e7%9a%84%e5%85%b6%e5%ae%9e%e4%b8%8d%e6%98%af%e6%b8%b8%e6%88%8f%e9%80%bb%e8%be%91"></a>
这个项目最麻烦的其实不是游戏逻辑
</h2><p>石头剪刀布规则简单得离谱。<br>
真正麻烦的是：<strong>衣服层级</strong><br>
因为角色不是：<strong>“一张完整图片”</strong></p>
<p>而是：</p>
<ul>
<li>底图 (防粿体被抓包,特意加密了)</li>
<li>衣服 A</li>
<li>衣服 B</li>
<li>衣服 C</li>
<li>配饰</li>
<li>遮挡层</li>
</ul>
<p>不停叠。</p>
<hr>
<h2 id="脱衣其实是图层管理">
<a class="header-anchor" href="#%e8%84%b1%e8%a1%a3%e5%85%b6%e5%ae%9e%e6%98%af%e5%9b%be%e5%b1%82%e7%ae%a1%e7%90%86"></a>
“脱衣”其实是图层管理
</h2><p>玩家赢了：</p>
<ul>
<li>按设定好的顺序移除一件衣服</li>
</ul>
<p>电脑赢了：</p>
<ul>
<li>再按逆序穿回来</li>
</ul>
<p>听起来简单。<br>
实际上会遇到一堆问题：</p>
<hr>
<h3 id="比如不能瞬间露底图">
<a class="header-anchor" href="#%e6%af%94%e5%a6%82%e4%b8%8d%e8%83%bd%e7%9e%ac%e9%97%b4%e9%9c%b2%e5%ba%95%e5%9b%be"></a>
比如“不能瞬间露底图”
</h3><p>这个特别关键。<br>
如果你：</p>
<pre><code>先删旧衣服
再加新衣服
</code></pre>
<p>中间可能会闪出底图。<br>
于是视觉效果会特别怪。<br>
所以我后来用了：<strong>reveal 覆盖逻辑</strong></p>
<p>新的层会立刻顶上。<br>
尽量避免：</p>
        
        <hr><p>本文2026-06-13首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-06-13</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
    

    <item>
      <title>同一个动画，我用三种技术栈实现的区别?</title>
      <link>https://zh.moejue.cn/posts/328/</link>
      <pubDate>Fri, 29 May 2026 20:54:39 &#43;0000</pubDate>
      <author>xxx@example.com (MoeJue)</author>
      <guid>https://zh.moejue.cn/posts/328/</guid>
      <description>
        <![CDATA[<h1>同一个动画，我用三种技术栈实现的区别?</h1><p>作者：MoeJue（xxx@example.com）</p>
        
          <p>最近我做了个挺有意思的小实验。<br>
我把一个二次元角色的小动画效果，分别用：</p>
<ul>
<li>WebGL</li>
<li>Canvas 2D</li>
<li>纯 DOM + CSS</li>
</ul>
<p>实现了三遍。<br>
效果本身不复杂：</p>
<ul>
<li>眨眼</li>
<li>眉毛/下眼皮联动</li>
<li>流汗轻微飘动</li>
<li>呆毛甩动</li>
</ul>
<p>但真正有意思的，其实不是“做出来”。<br>
而是：</p>
<blockquote>
<p>同一个东西，用三种技术栈实现时，到底会差多少？</p>
</blockquote>
<p>本质上就是一次“前端图形学味很浓”的复刻实验。</p>
<hr>
<h3 id="一开始只是想复刻一个呆毛动画">
<a class="header-anchor" href="#%e4%b8%80%e5%bc%80%e5%a7%8b%e5%8f%aa%e6%98%af%e6%83%b3%e5%a4%8d%e5%88%bb%e4%b8%80%e4%b8%aa%e5%91%86%e6%af%9b%e5%8a%a8%e7%94%bb"></a>
一开始只是想复刻一个呆毛动画
</h3><p>灵感来源：<a href="https://tamanidamani.itch.io/nijikas-ahoge">https://tamanidamani.itch.io/nijikas-ahoge</a><br>
我当时想法特别简单：“如果是我,要怎么实现？”<br>
然后越做越上头。最后直接演变成：</p>
<blockquote>
<p>那我干脆把 WebGL、Canvas2D、DOM 三种方案都做一遍算了。</p>
</blockquote>
<p>于是仓库就变成了现在这样：</p>
<ul>
<li><a href="https://iajue.github.io/CanvasGame/canvas/index.html">canvas/</a></li>
<li><a href="https://iajue.github.io/CanvasGame/canvas2D/index.html">canvas2D/</a></li>
<li><a href="https://iajue.github.io/CanvasGame/dom/index.html">dom/</a></li>
</ul>
<p>三个版本同效果实现。</p>
<hr>
<h2 id="先说结论">
<a class="header-anchor" href="#%e5%85%88%e8%af%b4%e7%bb%93%e8%ae%ba"></a>
先说结论
</h2><p>如果只让我说一句话：</p>
<h4 id="webgl-最强但-canvas2d-最舒服dom-最适合业务">
<a class="header-anchor" href="#webgl-%e6%9c%80%e5%bc%ba%e4%bd%86-canvas2d-%e6%9c%80%e8%88%92%e6%9c%8ddom-%e6%9c%80%e9%80%82%e5%90%88%e4%b8%9a%e5%8a%a1"></a>
WebGL 最强，但 Canvas2D 最舒服，DOM 最适合业务
</h4><hr>
<h2 id="1-webgl-版本最像真正游戏开发">
<a class="header-anchor" href="#1-webgl-%e7%89%88%e6%9c%ac%e6%9c%80%e5%83%8f%e7%9c%9f%e6%ad%a3%e6%b8%b8%e6%88%8f%e5%bc%80%e5%8f%91"></a>
1. WebGL 版本：最像“真正游戏开发”
</h2><p>这个版本是最折腾的。<br>
因为它本质上已经不是“前端动画”了, 而是：<strong>GPU 图形编程</strong></p>
<hr>
<h3 id="它到底怎么实现的">
<a class="header-anchor" href="#%e5%ae%83%e5%88%b0%e5%ba%95%e6%80%8e%e4%b9%88%e5%ae%9e%e7%8e%b0%e7%9a%84"></a>
它到底怎么实现的？
</h3><p>核心思路其实就是：</p>
<ul>
<li>底图一层</li>
<li>精灵图一层层贴</li>
<li>shader 控制绘制</li>
<li>JS 驱动动画参数</li>
</ul>
<p>比如：</p>
<ul>
<li>呆毛旋转</li>
<li>眨眼裁剪</li>
<li>alpha 混合</li>
</ul>
<p>这些其实都在 GPU 那边做。<br>
你会开始接触：</p>
<ul>
<li>uniform</li>
<li>texture</li>
<li>shader</li>
<li>UV</li>
<li>顶点坐标</li>
<li>纹理坐标</li>
</ul>
<p>然后人会逐渐失去笑容。</p>
        
        <hr><p>本文2026-05-29首发于<a href='https://zh.moejue.cn/'>阿珏酱のBlog</a>，最后修改于2026-05-29</p>]]>
      </description>
      
        <category>折腾代码</category>
      
    </item>
    
  </channel>
</rss>
