Javascript 如何根据游戏分数有条件地显示图像?
我已经创建了一个JavaScript点击游戏,它已经运行良好。现在,我想添加一些视觉噱头,使它看起来更好。一个噱头应该是一个焰火,只要达到最高分数就会显示出来。我已经有了焰火的代码,我已经把它展示出来了,但是我想知道,焰火是如何只在达到最高分数时才展示的,而不是永久性的 在这里您可以找到我关于游戏的代码:Javascript 如何根据游戏分数有条件地显示图像?,javascript,jquery,Javascript,Jquery,我已经创建了一个JavaScript点击游戏,它已经运行良好。现在,我想添加一些视觉噱头,使它看起来更好。一个噱头应该是一个焰火,只要达到最高分数就会显示出来。我已经有了焰火的代码,我已经把它展示出来了,但是我想知道,焰火是如何只在达到最高分数时才展示的,而不是永久性的 在这里您可以找到我关于游戏的代码: let klick = 0; display = document.querySelector('#time'); $("#start").click(function() { //cli
let klick = 0;
display = document.querySelector('#time');
$("#start").click(function() { //clickfunktion beim starten.
$("#start").fadeToggle(); //Der Startbutton geht weg
$("#welcome").fadeToggle(); // Das Willkommensschild geht weg
$("#zeitauswahl").fadeToggle(); //Die Auswahl der Sekunden verschwindet
$("#time").fadeToggle(900); //Timer kommt
$("#clicker").animate({
height: 'toggle' //inverse aktion...keine height --> klappt auf // aufgeklappt ---> macht height weg
}); //clicker wird gestartet
var d = $("#zeitauswahl option:selected").val(); //referenziert auf zeitauswahl und option
var dauer = parseInt(d); //verwandelt Dauer in einen Int
startTimer(dauer); //übergibt die variable dauer, und die Funktion wird gestartet.
})
function startTimer(dauer) {
let timer = parseInt(dauer);
runTimer();
zeit = setInterval(runTimer, 1000); //zahl gibt an, wie oft die Function pro zeit wiederholt wird. Hier eine Sekunde (1000Millisekunden)
function runTimer(){
display.textContent = parseInt(timer); // zeigt sekunden-variable
--timer; //setzt den timer immer einen herab
if (timer < 0.00) {
timer = 5;
console.log(timer); //debug info
$("#start").fadeToggle();
$("#welcome").fadeToggle();
$("#zeitauswahl").fadeToggle();
$("#time").fadeToggle();
$("#clicker").fadeToggle();
$("#clicker").css("margin-top", "10%");
$("#clicker").css("margin-left", "50%");
alert("Sauber du hast " + klick + " klicks in 5 Sekunden geschafft!");
alert('High Score ist ' + highScore(klick)); // zeigt den HighScore
klick = 0
console.log(timer);
clearInterval(zeit);
} //wenn timer auf 0 ist, wird alles wieder angezeigt und die Interval-Function beendet
}
};
$("#clicker").click(function() {
let zufall = Math.floor(Math.random() * 400) -200 //setzt eine zufällige höhe für den clicker
let zufal = Math.floor(Math.random() * 450) //Zufällige Variable für den Linkswert
klick = klick + 1 //setzt den zähler beim klicken eins hoch
if (klick % 2 == 0) {
$("#clicker").animate({
opacity: '0.3', //macht den klicker leicht durchsichtig
left: zufall + "px",
top: zufal + "px"
}, "fast"); //bewegt den Klick-Block auf eine zufällige Stelle
} else {
$("#clicker").animate({
opacity: '1.0', //macht den Klicker sichtbar
left: zufall + "px",
top: zufal + "px"
}, "fast")
}
});
var fireworks = {
///////////////////////////// configuration ////////////////////////////
// random colors
_color: ['#D0D0D0', '#FF0000', '#FFFF00', '#22FF00', '#2040FF', '#00CCFF', '#FF00FF', '#A319D6'],
// gravity factor
_gravity: 0.07,
// air resistance factor
_resistance: 0.975,
// zIndex of particles
_zIndex: 20000,
// maximal age of particles (in msec)
_maxAge: 2000,
// interval of appearing explosions (in msec)
_interval: [500, 2500],
// amount of particles per explosion
_particlesPerExplosion: 40,
// maximal speed of particle at moment of explosion
_speed: 5,
// minimal/maximal size of particle
_minSize: 8,
_maxSize: 12,
///////////////////////////// private vars /////////////////////////////
_particles: [],
_bodyWidth: 0,
_bodyHeight: 0,
_count: 0,
_lastInterval: 0,
////////////////////////////// functions ///////////////////////////////
// init fireworks
init: function()
{
this._addEventListener(window, 'resize', function() { return fireworks.resize.apply(fireworks); });
this._addEventListener(window, 'load', function() { return fireworks.start.apply(fireworks); });
},
// add an event listener
_addEventListener: function(el, name, handler)
{
if (el.addEventListener)
el.addEventListener(name, handler, false);
else if (el.attachEvent)
el.attachEvent('on' + name, handler);
},
// start fireworks
start: function()
{
// init window size
this.resize();
// start to move particles
this._animFn = function() {fireworks._move();};
this._lastInterval = this._time();
requestAnimFrame(this._animFn);
this._addExplosion();
},
// get current time
_time: function()
{
return +new Date();
},
// return a random integer
_random: function(value)
{
return Math.random() * value;
},
// return a random array element
_randomArray: function(arr)
{
return arr[
Math.floor(
Math.random() * (arr.length)
)
];
},
// add a new explosion
_addExplosion: function()
{
var x = Math.floor(this._random(this._bodyWidth)),
y = Math.floor((this._random(.5) + .1) * this._bodyHeight),
dx = this._random(10) - 5,
dy = this._random(-2) - 1,
c1 = this._randomArray(this._color),
c2 = this._randomArray(this._color);
for (var i = 0; i < this._particlesPerExplosion; i++)
{
this._createParticle(
x,
y,
dx,
dy,
i / (this._particlesPerExplosion - 1) * 180 * Math.PI,
this._random(this._speed),
this._random(1) > .5 ? c1 : c2
);
}
window.setTimeout(
function() { return fireworks._addExplosion.apply(fireworks);},
this._random(this._interval[1] - this._interval[0]) + this._interval[0]
);
},
// creates a new particle
_createParticle: function(x, y, dx, dy, rot, speed, color)
{
var el = null,
foundEl = false,
p = this._particles;
// look for old particle
for (var i = 0, l = p.length; i < l; i++)
if (p[i].data.age > 1)
{
el = p[i];
foundEl = true;
break;
}
// create span child for particles
if (!foundEl)
{
el = document.createElement('div');
el.className = 'particle';
el.style.position = 'absolute';
el.style.fontSize = this._maxSize + 'px';
el.style.zIndex = this._zIndex;
el.style.width = this._maxSize + 'px';
el.style.textAlign = 'center';
el.style.overflow = 'hidden';
el.innerHTML = '●';
}
el.style.left = x + 'px';
el.style.top = y + 'px';
el.style.color = color;
el.data = {
x: x,
y: y,
dx: Math.cos(rot) * speed + dx,
dy: Math.sin(rot) * speed + dy,
color: color,
age: Math.random() * .25
};
if (!foundEl)
{
document.getElementsByTagName('body')[0].appendChild(el);
this._particles.push(el);
}
},
// move existing particles
_move: function()
{
requestAnimFrame(this._animFn);
// calculate movement factor
var dif = this._time() - this._lastInterval;
this._lastInterval = this._time();
var delta = dif / 20,
el,
d,
p = this._particles,
r = Math.pow(this._resistance, delta),
g = this._gravity * delta,
a = dif / this._maxAge;
for (var i = 0, l = p.length; i < l; i++)
{
el = p[i];
d = el.data;
if (d.age > 1)
continue;
d.age += a;
d.dy += g;
d.dx *= r;
d.dy *= r;
d.x += d.dx * delta;
d.y += d.dy * delta;
if (d.x < 0)
{
d.dx *= -1;
d.x = 0;
}
else if (d.x > this._bodyWidth)
{
d.dx *= -1;
d.x = this._bodyWidth;
}
if (d.y < 0)
{
d.dy *= -1;
d.y = 0;
}
else if (d.y > this._bodyHeight)
{
d.dy *= -1;
d.y = this._bodyHeight;
}
if (d.age > 1)
d.x = d.y = 0;
el.style.left = d.x + 'px';
el.style.top = d.y + 'px';
el.style.color = (Math.random() * .5 + d.age >= 1) ? 'transparent' : d.color;
el.style.fontSize = Math.max(this._minSize, (1 - d.age) * this._maxSize) + 'px';
}
},
// calculate new positions for all particles
resize: function()
{
// get new width and height
this._bodyWidth = this._getWindowWidth() - this._maxSize;
this._bodyHeight = this._getWindowHeight() - this._maxSize - 10;
},
// get window width
_getWindowWidth: function()
{
return document.getElementsByTagName('body')[0].offsetWidth;
},
// get window height
_getWindowHeight: function()
{
var h = Math.max(self.innerHeight || 0, window.innerHeight || 0);
if (document.documentElement)
h = Math.max(h, document.documentElement.clientHeight || 0);
if (document.body)
{
h = Math.max(h, document.body.clientHeight || 0);
h = Math.max(h, document.body.scrollHeight || 0);
h = Math.max(h, document.body.offsetHeight || 0);
}
return h;
}
};
// shim layer with setTimeout fallback
window.requestAnimFrame = (function(){
return window.requestAnimationFrame ||
window.webkitRequestAnimationFrame ||
window.mozRequestAnimationFrame ||
window.oRequestAnimationFrame ||
window.msRequestAnimationFrame ||
function (cb){
window.setTimeout(cb, 1000 / 60);
};
})();
function highScore(score) {
var saved = 0;
saved = parseFloat(localStorage.getItem('highScore')) || 0; //nimmt zeichenketten Argument (highscore) und gibt Float. highscore oder 0
score = parseFloat(score) || 0;
document.getElementById("highscore").innerHTML = saved;
if (score > saved) {
saved = score; //speichert neuen Highscore, wenn der score größer ist als die gespeicherte variable
localStorage.setItem('highScore', score);//speichert highscore im browser
fireworks.init();
}
return saved;
}
设klick=0;
display=document.querySelector(“#time”);
$(“#开始”)。单击(函数(){//clickfunktion beim starten。
$(“#开始”).fadeToggle();//开始按钮
$(“#欢迎”).fadeToggle();//Das Willkommensschild geht weg
$(“#zeitauswahl”).fadeToggle();//Die Auswahl der Sekunden verschwindet
$(“#time”).fadeToggle(900)//Timer kommt
$(“#点击器”)。设置动画({
高度:'toggle'//反向运动…基恩高度-->klappt auf//aufgeklapt-->macht height weg
});//点击器与盖斯塔特
var d=$(“#zeitauswahl选项:选中”).val();//referenceiert auf zeitauswahl und option
var dauer=parseInt(d);//在einen Int中的verwandelt dauer
startTimer(dauer);//变量dauer和函数与格式塔。
})
功能启动器(dauer){
设定时器=parseInt(dauer);
运行计时器();
zeit=setInterval(runTimer,1000);//zahl gibt an,wie oft die Function pro zeit wiederholt wird.Hier eine Sekunde(1000Millisekunden)
函数runTimer(){
display.textContent=parseInt(计时器);//zeigt sekunden变量
--timer;//设置计时器immer einen herab
如果(计时器<0.00){
定时器=5;
console.log(计时器);//调试信息
$(“#开始”).fadeToggle();
$(“#欢迎”).fadeToggle();
$(“zeitauswahl”).fadeToggle();
$(“#时间”).fadeToggle();
$(“#clicker”).fadeToggle();
$(“#clicker”).css(“利润率最高”、“10%”);
$(“#clicker”).css(“左边距”、“50%”);
警报(“索伯-杜-哈兹”+klick+“klicks in 5 Sekunden geschafft!”);
警报('High Score ist'+highScore(klick));//zeigt den highScore
克利克=0
控制台日志(计时器);
清除间隔(zeit);
}//如果计时器为0,则所有计时器均为wieder angezeigt和die Interval函数
}
};
$(“#clicker”)。单击(函数(){
让zufall=Math.floor(Math.random()*400)-200//setzt-eine-zufällige höhe für den clicker
让zufal=Math.floor(Math.random()*450)//Zufällige变量für den Linkswert
klick=klick+1//setzt den zähler beim klicken eins hoch
如果(K单击%2==0){
$(“#点击器”)。设置动画({
不透明度:“0.3”//macht den klicker leicht Durchichstig
左:zufall+“px”,
顶部:zufal+“px”
},“fast”);//bewegt den Klick Block auf eine zufällige Stelle
}否则{
$(“#点击器”)。设置动画({
不透明度:“1.0”,//macht den Klicker sichtbar
左:zufall+“px”,
顶部:zufal+“px”
}“快速”)
}
});
var烟花={
/////////////////////////////配置////////////////////////////
//随机颜色
_颜色:[“D0D0D0”、“FF0000”、“FFFF00”、“22FF00”、“2040FF”、“00CCFF”、“FF00FF”、“A319D6”],
//重力因子
_重力:0.07,
//空气阻力系数
_阻力:0.975,
//粒子锌指数
_zIndex:20000,
//粒子的最大年龄(以毫秒为单位)
_最大年龄:2000,
//出现爆炸的间隔(毫秒)
_间隔:[5002500],
//每次爆炸的粒子数量
_微粒爆炸:40,
//爆炸瞬间粒子的最大速度
_速度:5,,
//颗粒的最小/最大尺寸
_minSize:8,
_最大尺寸:12,
/////////////////////////////私人骑兵/////////////////////////////
_粒子:[],
_车身宽度:0,
_身高:0,
_计数:0,
_最后间隔:0,
//////////////////////////////功能///////////////////////////////
//烟火
init:function()
{
这是._addEventListener(窗口'resize',函数(){return fireforks.resize.apply(fireforks);});
这是._addEventListener(窗口'load',函数(){return fireforks.start.apply(fireforks);});
},
//添加事件侦听器
_addEventListener:函数(el、名称、处理程序)
{
如果(el.addEventListener)
el.addEventListener(名称、处理程序、错误);
否则,如果(见附件)
el.attachEvent('on'+姓名,处理人);
},
//燃放烟火
开始:函数()
{
//初始窗口大小
这是resize();
//开始移动粒子
这是._animFn=function(){fireshouse._move();};
这个。_lastInterval=这个。_time();
requestAnimFrame(此.\u animFn);
这个._addExplosion();
},
//获取当前时间
_时间:函数()
{
返回+新日期();
},
//返回一个随机整数
_随机:函数(值)
{
返回Math.random()*值;
},
//返回一个随机数组元素
_随机数组:函数(arr)
{
返回arr[
数学地板(
Math.random()*(arr.length)
)
];
},
//添加一个新的爆炸
_addExplosion:function()
{
var x=数学地板(此._随机(此._车身宽度)),
y=数学地板((此._随机(.5)+.1)*此._车身高度),
dx=这个随机数(10)-5,
dy=这个。_随机(-2)-1,
c1=此随机数组(此颜色),
c2=此._随机数组(此._颜色);
对于(var i=0;i.5?c1:c2
);
}
window.setTimeout(
函数(){返回焰火。_addExplosion.apply(焰火);},
本随机(本随机区间[1]-本随机区间[0])+本随机区间[0]
);
},
//创建新粒子
_createParticle:函数(x,y,dx,dy,rot,speed,color)
{
var el=null,
foundEl=false,
p=这个;
//寻找旧粒子
for(var i