Bigmap Weather

This commit is contained in:
oc 2018-12-01 12:30:21 +08:00
parent bcac9e47b5
commit 57b40b64cb
2 changed files with 25 additions and 23 deletions

View File

@ -123,24 +123,25 @@ control.prototype.setRequestAnimationFrame = function () {
// weather // weather
if (core.isPlaying() && timestamp-core.animateFrame.weather.time>30) { if (core.isPlaying() && timestamp-core.animateFrame.weather.time>30) {
var ox = core.bigmap.offsetX, oy = core.bigmap.offsetY;
if (core.animateFrame.weather.type == 'rain' && core.animateFrame.weather.level > 0) { if (core.animateFrame.weather.type == 'rain' && core.animateFrame.weather.level > 0) {
core.clearMap('weather'); core.clearMap('weather');
core.canvas.weather.strokeStyle = 'rgba(174,194,224,0.8)'; core.canvas.weather.strokeStyle = 'rgba(174,194,224,0.8)';
core.canvas.weather.lineWidth = 1; core.canvas.weather.lineWidth = 1;
core.canvas.weather.lineCap = 'round'; core.canvas.weather.lineCap = 'round';
core.animateFrame.weather.nodes.forEach(function (p) { core.animateFrame.weather.nodes.forEach(function (p) {
core.canvas.weather.beginPath(); core.canvas.weather.beginPath();
core.canvas.weather.moveTo(p.x, p.y); core.canvas.weather.moveTo(p.x-ox, p.y-oy);
core.canvas.weather.lineTo(p.x + p.l * p.xs, p.y + p.l * p.ys); core.canvas.weather.lineTo(p.x + p.l * p.xs - ox, p.y + p.l * p.ys - oy);
core.canvas.weather.stroke(); core.canvas.weather.stroke();
p.x += p.xs; p.x += p.xs;
p.y += p.ys; p.y += p.ys;
if (p.x > 416 || p.y > 416) { if (p.x > core.bigmap.width*32 || p.y > core.bigmap.height*32) {
p.x = Math.random() * 416; p.x = Math.random() * core.bigmap.width*32;
p.y = -10; p.y = -10;
} }
@ -162,26 +163,26 @@ control.prototype.setRequestAnimationFrame = function () {
var angle = core.animateFrame.weather.data; var angle = core.animateFrame.weather.data;
core.animateFrame.weather.nodes.forEach(function (p) { core.animateFrame.weather.nodes.forEach(function (p) {
core.canvas.weather.moveTo(p.x, p.y); core.canvas.weather.moveTo(p.x - ox, p.y - oy);
core.canvas.weather.arc(p.x, p.y, p.r, 0, Math.PI * 2, true); core.canvas.weather.arc(p.x - ox, p.y - oy, p.r, 0, Math.PI * 2, true);
// update // update
p.x += Math.sin(angle) * 2; p.x += Math.sin(angle) * 2;
p.y += Math.cos(angle + p.d) + 1 + p.r / 2; p.y += Math.cos(angle + p.d) + 1 + p.r / 2;
if (p.x > 416 + 5 || p.x < -5 || p.y > 416) { if (p.x > core.bigmap.width*32 + 5 || p.x < -5 || p.y > core.bigmap.height*32) {
if (Math.random() > 1 / 3) { if (Math.random() > 1 / 3) {
p.x = Math.random() * 416; p.x = Math.random() * core.bigmap.width*32;
p.y = -10; p.y = -10;
} }
else { else {
if (Math.sin(angle) > 0) { if (Math.sin(angle) > 0) {
p.x = -5; p.x = -5;
p.y = Math.random() * 416; p.y = Math.random() * core.bigmap.height*32;
} }
else { else {
p.x = 416 + 5; p.x = core.bigmap.width*32 + 5;
p.y = Math.random() * 416; p.y = Math.random() * core.bigmap.height*32;
} }
} }
} }
@ -1412,14 +1413,14 @@ control.prototype.setWeather = function (type, level) {
level = parseInt(level); level = parseInt(level);
// 当前天气:则忽略 // 当前天气:则忽略
if (type==core.animateFrame.weather.type && if (type==core.animateFrame.weather.type && !core.isset(level)) {
(!core.isset(level) || 20*level==core.animateFrame.weather.level)) {
return; return;
} }
if (!core.isset(level)) level=5; if (!core.isset(level)) level=5;
if (level<1) level=1; if (level>10) level=10; if (level<1) level=1; if (level>10) level=10;
level *= 20; level *= parseInt(20*core.bigmap.width*core.bigmap.height/169);
// 计算当前的宽高
core.clearMap('weather') core.clearMap('weather')
core.animateFrame.weather.type = type; core.animateFrame.weather.type = type;
@ -1430,8 +1431,8 @@ control.prototype.setWeather = function (type, level) {
if (type == 'rain') { if (type == 'rain') {
for (var a=0;a<level;a++) { for (var a=0;a<level;a++) {
core.animateFrame.weather.nodes.push({ core.animateFrame.weather.nodes.push({
'x': Math.random()*416, 'x': Math.random()*core.bigmap.width*32,
'y': Math.random()*416, 'y': Math.random()*core.bigmap.height*32,
'l': Math.random() * 2.5, 'l': Math.random() * 2.5,
'xs': -4 + Math.random() * 4 + 2, 'xs': -4 + Math.random() * 4 + 2,
'ys': Math.random() * 10 + 10 'ys': Math.random() * 10 + 10
@ -1441,10 +1442,10 @@ control.prototype.setWeather = function (type, level) {
else if (type=='snow') { else if (type=='snow') {
for (var a=0;a<level;a++) { for (var a=0;a<level;a++) {
core.animateFrame.weather.nodes.push({ core.animateFrame.weather.nodes.push({
'x': Math.random()*416, 'x': Math.random()*core.bigmap.width*32,
'y': Math.random()*416, 'y': Math.random()*core.bigmap.height*32,
'r': Math.random() * 5 + 1, 'r': Math.random() * 5 + 1,
'd': Math.random() * level, 'd': Math.random() * Math.min(level, 200),
}) })
} }
} }

View File

@ -1380,6 +1380,9 @@ events.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback
core.events.setFloorName(floorId); core.events.setFloorName(floorId);
// 重置画布尺寸
core.maps.resizeMap(floorId);
// 更改BGM // 更改BGM
if (core.isset(core.status.maps[floorId].bgm)) { if (core.isset(core.status.maps[floorId].bgm)) {
var bgm = core.status.maps[floorId].bgm; var bgm = core.status.maps[floorId].bgm;
@ -1425,8 +1428,6 @@ events.prototype.changeFloor = function (floorId, stair, heroLoc, time, callback
} }
}) })
} }
// 重置画布尺寸
core.maps.resizeMap(floorId);
// 画地图 // 画地图
core.drawMap(floorId, function () { core.drawMap(floorId, function () {
if (core.isset(heroLoc.direction)) if (core.isset(heroLoc.direction))