导航

萌即是正义!时不时分享一些ACG活动记录与有趣代码的小站!

侧边栏
热门文章
1推文
纯 AI 制作的视觉小说。 使用 GPT 6.1 Sol 制作。 剧本、美术、音乐、程序等全部都是 AI 完成的。 故事为 Happy Sugar Life 的 if 线。 剧本和美术多少有些小瑕疵,但是感觉无伤大雅,多抽抽卡应该是能抽出完美的内容出来。 试玩链接: https://www.wikimoe.com/web_demo/ai_game/happy-sugar-life-half-of-tomorrow/
热度
329
2推文
看了一场不一样的《超时空辉夜姬》。 上周六,也就是2026年9月19日,去池袋的电影院看了 ULTRA 4DX 版《超时空辉夜姬》。 所谓的 ULTRA 4DX 就是前面三面荧幕,椅子会随着剧情发生摇晃震动等效果。 周围还会模拟刮风、下雨、打雷、爆炸烟雾等效果。 印象最深刻的就是小辉夜姬打了个喷嚏,喷了我一脸鼻水的模拟效果😂。 其他像是 VR 竞技游戏环节的椅子晃动效果非常棒! 唯一美中不足的是,官方给出的效果图里三面荧幕看起来都很亮,实际上左右两面荧幕是明显要暗很多的,而且清晰度其实也不是很高。 但是考虑到左右两面荧幕平时不是盯着看的,而是用余光来看的这么一种使用场景,也还能接受。
热度
277
3推文
最近下北泽把月亮请了下来呢
热度
225
4推文
吃完联动咖啡后,去新宿逛了逛街。 意外的发现丸井百货有一大片芳文社的周边贩卖区。
热度
154
5推文
去六本木吃了《穹庐下的魔女联动咖啡》的联动咖啡。 这是一家电视台里的咖啡店,本来主打的其实是4000日元的水果套餐。 联动菜单里的蒙古包我觉得是最有意思的,青青草地上的白色蒙古包蛋糕。 《原论》三明治看起来像是厚厚的书,但其实本质就是2个厚厚的三明治。
热度
154
6推文
第一次尝试联动酒吧,《超时空辉夜姬》联动酒吧。 昨天,也就是2026年9月20日,预约了位于新宿的 HUB 酒吧。 这是一家英国风格的连锁酒吧,现在被《超时空辉夜姬》的联动包场了。 这应该是我第一次去酒吧吧。 因为本身就是连锁酒吧,酒精饮料和菜品的口味都非常有保证(炸鱼薯条好吃呢!)。 官方也很贴心的在FAQ强调,即使你不喝酒,这里的无酒精饮料和菜品也非常不错。 看起来是想借助联动,改变酒吧的刻板印象,尽可能吸引更多原本不喝酒的消费群体。 这确实让我对酒吧这样的场所有了不小的改观,有可能下次还会去消费。 联动送的特典本来以为是小卡片,结果发现是相当有质感的金属牌子! 不过人工排队去前台点餐的机制不太好,饮料是现场做完自己端到位置上,食物类则是由工作人员送到位置上,就感觉效率并不是很高。
热度
135
7博文
探访日本的废校:《轻音少女》圣地巡礼之丰乡小学校旧校舍群
热度
117
8博文
《夏目友人帐》圣地巡礼之人吉 风景篇
热度
104
9博文
【自制】《少女与战车:战车梦幻大会战》秋山优花里的圣葛罗莉安娜女学院潜入视频
热度
104
10博文
【H5小游戏】制作一个简单的丢鱼雷小游戏
热度
104
最新评论
广树管理员
2026-10-04 15:00
@Ringnee:还原度非常高的月亮
广树管理员
2026-10-04 14:59
@saber酱:是呀,非常有趣
Ringnee
2026-10-04 09:49
这个做得还挺厉害的
saber酱
2026-10-04 01:12
挺有趣的呢,好玩~
广树管理员
2026-09-29 20:28
@陈X布: 怀念起了那天一起唱歌
攻略中
空之轨迹 the 1st
暂无评分
Steam空之轨迹 the 1st
2026年8月02日 12时 ~ 攻略中
已累计游玩2个月6天
因父亲卡西乌斯失踪而踏上旅程的艾丝蒂尔与约书亚, 在巡游利贝尔王国的过程中, 经历了无数与未知同伴的相遇与别离, 而在旅途终点等待着两人的,究竟会是什么……?
节奏天国 奇迹之星
暂无评分
NS节奏天国 奇迹之星
2026年7月08日 20时 ~ 攻略中
已累计游玩3个月1天
《节奏天国:奇迹之星》是一款轻松又充满创意的音乐节奏游戏,玩家只需跟随音乐节拍按下按键,就能完成跳跃、敲击空罐、制作料理等各种有趣的小挑战。游戏延续了《节奏天国》系列简单易上手、节奏感强、画风幽默的特点,让玩家在一个个短小精巧的关卡中感受音乐与反应力结合的乐趣,适合喜欢节奏游戏和轻松休闲玩法的玩家体验。
告别回忆 -无垢少女- 致最爱的你
暂无评分
Steam告别回忆 -无垢少女- 致最爱的你
2026年6月24日 20时 ~ 攻略中
已累计游玩3个月15天
系列作发售至今经历了19年,做为其系列最终作的《告别回忆 ~无垢少女~》(以下略称为本篇)在2018年3月发售。本次的FanDisc和至今的系列作相同,带给玩家在各结局后的短篇故事。请充分享受和各个女主角们在欢乐结局后的幸福时光。
亚路塔:狐狸狐途的面包冒险
暂无评分
Steam亚路塔:狐狸狐途的面包冒险
2026年2月12日 19时 ~ 攻略中
已累计游玩7个月27天
一场席卷全世界的面包革命现在开始! 主人公查雅阴错阳差之下,开始了在荒废的岛屿上经营面包店的生活。 出外冒险搜集食材、研发崭新面包配方、遇见性格各异的伙伴们,建造更丰富的设施,用面包香气使无人问津的广场再次热闹起来!
fault - StP - LIGHTKRAVTE
暂无评分
Steamfault - StP - LIGHTKRAVTE
2025年5月29日 20时 ~ 攻略中
已累计游玩1年4个月
全球累计销量超过50万份的“fault”系列最新作!故事的舞台是一个融合了奇幻与科幻的超前世界——卢森海德王国。本作讲述了生活在此地的一个平凡又平庸的究极普通市民——名为果子的少年的故事。
PSN奖杯卡

PSN奖杯卡

归档
赞助商广告

用canvas描绘容器注水的效果(如果没灌满会有波浪效果)

2018-02-02 16:19:02
JavaScript

其实原理就是控制正弦波的幅度。

CSS:

html, body {
  height: 100%;
  text-align: center;
  background-color: #323436;
}

canvas#sineCanvas {
  width:500px;
  height:500px;
  overflow:hidden;
  background:#5b5d5e;
}

HTML:

<div id="canvas-container">
    <canvas id="sineCanvas"></canvas>
</div>

JS:

(function () {

var unit = 100,
    canvas, context, canvas2, context2,
    height, width, xAxis, yAxis,
    draw;
var percentMax = 0.6;//液体占容器的百分比
var percentMin = 0;
var maxHeight = 1;
if(percentMax>=1){
	maxHeight = 0.95;
}
var wavePower = 3;
//初始化
function init() {
	window.requestAnimFrame = (function(){
	  return  window.requestAnimationFrame       ||
			  window.webkitRequestAnimationFrame ||
			  window.mozRequestAnimationFrame    ||
			  function( callback ){
				window.setTimeout(callback, 1000/60);
			  };
	})();
    
    canvas = document.getElementById("sineCanvas");
    
    canvas.width = 1000; 
    canvas.height = 1000;
    
    context = canvas.getContext("2d");
    
    height = canvas.height;
    width = canvas.width;
    yAxis = 0;
    
    draw();
	
}
function draw() {
    
    // 清理canvas画板
    context.clearRect(0, 0, width, height);

    //描绘波浪
    drawWave(['#cea155','#e8c183'], 1, 1.5);
	
	if(percentMin<=percentMax){
    	percentMin = percentMin+0.002;
    	xAxis = Math.floor(height*(maxHeight-percentMin));
    }
    if(percentMin>0.80){
    	if(wavePower<=36*percentMax){
        	wavePower = wavePower+0.05
        }
    }
    
    // 更新时间然后重新绘制
    draw.seconds = draw.seconds + .009;
    draw.t = draw.seconds*Math.PI;
    window.requestAnimFrame(draw);
};
draw.seconds = 0;
draw.t = 0;

/**
* 描绘波浪
* drawWave([渐变左侧颜色,右侧颜色], 不透明度, 波浪的幅度)
*/
function drawWave(color, alpha, zoom) {
    context.globalAlpha = alpha;
	var linearGrad = context.createLinearGradient(0, 0, width, 0);
	linearGrad.addColorStop(0.0, color[0]);  
    linearGrad.addColorStop(1.0, color[1]); 
	context.fillStyle = linearGrad;
	
    context.beginPath(); //开始路径
    drawSine(draw.t / 0.5, zoom);
    context.lineTo(width + 10, height); //路径朝canvas右下
    context.lineTo(0, height); //路径朝canvas左下
    context.closePath() //封闭路径
    context.fill(); //涂色
}

/**
 * 画正弦
 * drawSine(时间, 波浪的浮动)
 */
function drawSine(t, zoom) {

    var x = t; //将时间转换为x轴
    var y = Math.sin(x)/zoom;
    context.moveTo(yAxis, unit*y+xAxis); //在开始位置放置路径
    
    // 绘制波浪、横向幅度 
    for (var i = yAxis; i <= width + 10; i += 10) {
        x = t+(-yAxis+i)/unit/zoom;
        y = Math.sin(x - 0)/wavePower;
        context.lineTo(i, unit*y+xAxis);
    }
}

init();
    
})();


收款.png


file_000000008460720687635c008459256b.png