主頁 > 企業開發 > 我不知道如何限制呼叫函式之間的時間

我不知道如何限制呼叫函式之間的時間

2022-05-18 09:38:21 企業開發

  
//let screenWidth = window.screen.width;
//let screenHeight = window.screen.height;
let screenWidth = 800;
let screenHeight = 600;
let assets = {};
let frames = 60;

let score = 0;
let lives = 3;
let player;
// let enemie;
//let enemies;
let bullet;
//let bullets;
let powerup = 0;
let gameOver = true;

function drawScoreBoard() {
  textSize(20);
  fill('white');
  text(`Score: ${score} / Lives: ${lives}`, 20, 40);
}

function preload() {
  assets.player = loadImage('assets/Player.png');
  assets.enemie = loadImage('assets/Enemie.png');
  assets.bulletRight = loadImage('assets/Bullet_Right.png');
  assets.bulletLeft = loadImage('assets/Bullet_Left.png');
  assets.bulletUp = loadImage('assets/Bullet_Up.png');
  assets.bulletDown = loadImage('assets/Bullet_Down.png');
}

function setup() {
  bullets = createGroup();
  enemies = createGroup();
  assets.player.resize(30, 30);
  assets.enemie.resize(30, 30);
  assets.bulletRight.resize(30, 30);
  assets.bulletLeft.resize(30, 30);
  assets.bulletUp.resize(30, 30);
  assets.bulletDown.resize(30, 30);
  createCanvas(screenWidth, screenHeight);
}

function createBullet(){
    let numList = [0, 90, 180, 270, 360];
    let bulletDirection = [assets.bulletLeft, assets.bulletUp, assets.bulletRight, assets.bulletDown];
    let randomdirection = numList[Math.floor(Math.random() * numList.length)];
    let bullet = createSprite(bulletDirection[(Math.round(player.getDirection()/90))]);
    
    enemie.centerX = random(0, screenWidth);
    enemie.setSpeed(random(1,10));
    enemie.setDirection(randomdirection);
    enemie.setCollider("circle");

    bullets.add(bullet);
}

function createPlayer(){
  player = createSprite(assets.player);
  player.bottom = screenHeight - 20;
  player.centerX = screenWidth / 2;
}


function shoot(amountofbulletstobeshot) {
  let bulletDirection = [assets.bulletLeft, assets.bulletUp, assets.bulletRight, assets.bulletDown];
  let bullet = createSprite(bulletDirection[Math.abs(((Math.round(player.getDirection()/90))))]);
  bullets.add(bullet);
//  bullet.direction = player.direction;
  bullet.centerX = player.centerX;
  bullet.centerY = player.centerY;
  bullet.setVelocity(11, player.getDirection());

//  console.log('The players current direction right now is:  '   player.getDirection());

}
function shooting() {
  if (keyIsDown(KEY.SPACE)) {
    if (powerup === 1) {
      shoot(3);
    }
    else {
      shoot(1);
    }
  }
    if (bullet) {
      if (bullet.centerX[1] === screenWidth) {
        bullets.remove(bullet);
    }
  }
}

function updateplayer() {
  //movement
  if (keyIsDown) {
    if (keyIsDown(KEY.RIGHT_ARROW)) {
      player.setVelocity(6, 0);
    }
    if (keyIsDown(KEY.LEFT_ARROW)) {
      player.setVelocity(6, 180);
    }
    if (keyIsDown(KEY.UP_ARROW)) {
      player.setVelocity(6, 270);
    }
    if (keyIsDown(KEY.DOWN_ARROW)) {
      player.setVelocity(6, 90);
    }
  }

  //dont go offscreen
  if (player.left < 0) {
    player.left = 0;
  }
  if (player.right > screenWidth) {
    player.right = screenWidth;
  }
  if (player.top < 0) {
    player.top = 0;
  }
  if (player.bottom > screenHeight) {
    player.bottom = screenHeight;
  }
  enemies.overlap(player, HandlePlayerEnemieCollision);
  //end up updateplayer
}
function updateEnemie() {
if (frameCount % 1 === 0) {
    let directions = ["LEFT", "RIGHT", "UP", "DOWN"];
    let direction = random(directions);
    if (direction === "LEFT" && enemie.left > 0) {
      enemie.centerX -= 5;
    }
    if (direction === "RIGHT" && enemie.right < screenWidth) {
      enemie.centerX  = 5;
    }
    if (direction === "UP" && enemie.top > 0) {
      enemie.centerY -= 5;
    }
    if (direction === "DOWN" && enemie.bottom < screenHeight) {
      enemie.centerY  = 5;
    }

}
}

function createEnemie() {
  let directions = [270, 180, 0, 90];
  direction = directions[(Math.floor(Math.random() * 5))];
  enemies.overlap(bullets, HandleEnemieBulletCollision);
  if (frameCount % 60 === 0) {
  enemie = createSprite(assets.enemie);
    enemie.centerX = Math.floor(Math.random() * 300)   100;
    enemie.centerY = Math.floor(Math.random() * 300)   100;
    enemie.setVelocity(Math.floor(Math.random() * 5)   1, direction);
    enemies.add(enemie);
  }
}

function HandleEnemieEdgeCollision(enemie, edge) {
  if (enemie.centerY === screenWidth) {
    enemie.remove();
  }
}

function HandleEnemieBulletCollision(enemie, bullet) {
   enemie.remove();
   bullet.remove();
   score  ;
}

function HandlePlayerEnemieCollision(player, enemie) {
  enemie.remove();
  player.remove();
  lives--;
  if (lives === 0) {
        gameOver = true;
    }
  createPlayer();
}

/*
function updateEnemie() {
  player.setVelocity(7, player.direction);
}
*/

function cheat() {
  score = (score   1000000);
  lives = (lives   1000000);
  cheats = 'on';
  if (cheats === 'on') {
    textSize(50);
    fill('yellow');
    text('CHEATS ACTIVATED', 400, 300);
  }
}

/*
function sleep(milliseconds) {
  var start = new Date().getTime();
  for (var i = 0; i < 1e7; i  ) {
    if ((new Date().getTime() - start) > milliseconds) {
      break;
    }
  }
}
*/


function drawGameOverScreen() {
    background("black");
    textAlign(CENTER);
    fill("white");
    textSize(40);
    text("WELCOME", screenWidth/2, screenHeight/2);
    textSize(20);
    text("Press SPACE to play!", screenWidth/2, screenHeight/2   100);

    if (keyWentDown(KEY.SPACE)){
        resetGame();
        gameOver = false;
    }
}

function resetGame(){
    score = 0; 
    lives = 3;

    createPlayer();
}

function drawGame() {
   background('lightgreen');
  drawScoreBoard();
  updateplayer();
  drawSprites();
  shooting();
//  updateEnemie();
  createEnemie();  
}

function draw() {
  
  if (gameOver === true) {
        drawGameOverScreen();
    } else {
        drawGame();
    }
}

有我的代碼,我想添加一個時間限制,以限制你可以再次射擊需要多少秒,現在你可以發送垃圾郵件并讓所有子彈直線前進我需要等待才能讓玩家再拍,謝謝!這將有助于分配,我需要在盡可能短的時間內完成。

uj5u.com熱心網友回復:

使用標志了解何時啟用和禁用拍攝。每次射擊后禁用射擊能力。然后使用 asetTimeout在一定時間后啟用拍攝。

let shootingEnabled = true;

function tempDisableShooting(duration) {
  shootingEnabled = false;

  setTimeout(() => {
    shootingEnabled = true;
  }, duration);
}

function shooting() {
  if (shootingEnabled && keyIsDown(KEY.SPACE)) {
    if (powerup === 1) {
      shoot(3);
    } else {
      shoot(1);
    }

    tempDisableShooting(1000); // Disable shooting for 1 second.
  }

  if (bullet) {
    if (bullet.centerX[1] === screenWidth) {
      bullets.remove(bullet);
    }
  }
}

uj5u.com熱心網友回復:

添加屬性以跟蹤拍攝的禁用狀態和延遲時間的常量(以毫秒為單位)。

let shootDisabled = false;
const shootDelayMS = 300;

將您的拍攝功能更新為僅拍攝 if shootDisabled == false,在每次拍攝后更新shootDisabledto true,并觸發 a在再次設定之前setTimeout等待shootDelayMS毫秒shootDisabledfalse

function shoot(amountofbulletstobeshot) {
  if (shootDisabled == false) {
    let bulletDirection = [assets.bulletLeft, assets.bulletUp, assets.bulletRight, assets.bulletDown];
    let bullet = createSprite(bulletDirection[Math.abs(((Math.round(player.getDirection()/90))))]);
    bullets.add(bullet);
    bullet.centerX = player.centerX;
    bullet.centerY = player.centerY;
    bullet.setVelocity(11, player.getDirection());

    shootDisabled = true;
    setTimeout(() => shootDisabled = false, shootDelayMS );
  }
}

uj5u.com熱心網友回復:

一種方法是將資料保存在兩個變數中:is_shooting、shot_reset。

if(is_shooting){
    if(shot_reset>=x){ //x is frame count till able to shoot again)
        shot_reset==0;
        is_shooting=false;
    }else{
        shot_reset  
    }

}

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/476808.html

標籤:javascript

上一篇:如何包含更多變數以顯示和隱藏圖示

下一篇:ReactDomRoutes未按預期作業,更改路徑但頁面上沒有任何內容

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more