植物明星大乱斗5
能帮到你的话,就给个赞吧 😘
文章目录
- timer.h
- timer.cpp
- camera.h
- camera.cpp
- menuScene.cpp
timer.h
#pragma once
#include <functional>class Timer {public:void reStart();void setTimer(int timerMs);void setIsOneShot(bool isOneShot);void setCallback(const std::function<void()>& cb);
public:void setTimer(int timerMs, bool isOneShot, const std::function<void()>& cb);
public:void pause();void resume(); //恢复运行public:void update(int runTimeMs); //让定时器运行runTimeMsprivate:int timer = 0; //定时时间int time = 0; //计时器已经经过的时间bool isPause = false;bool isOneShot = false; //是否只计时一次bool isShotted = false; //是否触发std::function<void()> callback;
};
timer.cpp
#include "timer.h"void Timer::reStart(){time = 0;isShotted = false;
}void Timer::setTimer(int timerMs){this->timer = timerMs;
}void Timer::setIsOneShot(bool isOneShot){this->isOneShot = isOneShot;
}void Timer::setCallback(const std::function<void()>& cb){callback = cb;
}void Timer::setTimer(int timerMs, bool isOneShot, const std::function<void()>& cb){setTimer(timerMs);setIsOneShot(isOneShot);setCallback(cb);
}void Timer::pause(){isPause = true;
}void Timer::resume(){isPause = false;
}void Timer::update(int runTimeMs){if (isPause)return;time += runTimeMs; // 让定时器运行runTimeMsif (time >= timer) {if ((!isOneShot || isOneShot && !isShotted) && callback)callback();isShotted = true;time = 0;}
}
camera.h
#pragma once#include "vector2.h"
#include "timer.h"class Camera {public:void reset();const Vector2& getPostion() const;
public:void update(int runTimeMs); //让摄像机执行runTimeMsvoid shake(float shakingAmplitude, int shakingTimeMs);public:Camera();private:Vector2 pos;bool isShaking; //是否正在抖动float shakingAmplitude = 0; Timer shakeTimer;
};
camera.cpp
#include "camera.h"void Camera::reset(){pos.x = 0;pos.y = 0;
}void Camera::update(int runTimeMs){shakeTimer.update(runTimeMs);//设置以抖动幅度为半径的圆进行抖动if (isShaking) {pos.x = shakingAmplitude * ((rand() % 100 - 50) / 50.0f);pos.y = shakingAmplitude * ((rand() % 100 - 50) / 50.0f);}}void Camera::shake(float shakingAmplitude, int shakingTimeMs){isShaking = true;this->shakingAmplitude = shakingAmplitude;shakeTimer.setTimer(shakingTimeMs);shakeTimer.reStart();
}const Vector2& Camera::getPostion() const{return pos;
}Camera::Camera(){shakeTimer.setIsOneShot(true);shakeTimer.setCallback([&] {//取消抖动this->isShaking = false;//重置摄像机this->reset();});
}
menuScene.cpp
#include "menuScene.h"
#include <iostream>void MenuScene::enter(){//设置动画aniPeaShooterRunRight.setAnimation(&atlasPeaShooterRunRight, 75, true, [] {});//设置定时器timer.setTimer(5000, false, [] {std::cout << "shot" << std::endl;});}void MenuScene::receiveInput(const ExMessage& msg){if (msg.message == WM_KEYDOWN)camera.shake(20, 35000);
}void MenuScene::update(int runTimeMs){//让定时器运行runTimeMstimer.update(runTimeMs);//让摄像机运行runTimeMscamera.update(runTimeMs);aniPeaShooterRunRight.update(runTimeMs);
}void MenuScene::render(){auto cameraPos = camera.getPostion();aniPeaShooterRunRight.render(100 - cameraPos.x, 100 - cameraPos.y);
}void MenuScene::exit(){std::cout << "菜单场景退出" << std::endl;
}相关文章:
植物明星大乱斗5
能帮到你的话,就给个赞吧 😘 文章目录 timer.htimer.cppcamera.hcamera.cppmenuScene.cpp timer.h #pragma once #include <functional>class Timer {public:void reStart();void setTimer(int timerMs);void setIsOneShot(bool isOneShot);void …...
每日算法练习
各位小伙伴们大家好,今天给大家带来几道算法题。 题目一 算法分析 首先,我们应该知道什么是完全二叉树:若一颗二叉树深度为n,那么前n-1层是满二叉树,只有最后一层不确定。 给定我们一棵完全二叉树,我们查看…...
把握鸿蒙生态崛起机遇:开发者如何在全场景操作系统中脱颖而出
把握鸿蒙生态崛起机遇:开发者如何在全场景操作系统中脱颖而出 随着鸿蒙系统的逐步成熟和生态体系的扩展,其与安卓、iOS 形成了全新竞争格局,为智能手机、穿戴设备、车载系统和智能家居等领域带来了广阔的应用前景。作为开发者,如…...
字符串类型排序,通过枚举进行单个维度多个维度排序
字符串类型进行排序通过定义枚举值实现 1.首先创建一个测试类,并实现main方法 2.如果是单个维度的排序,则按照顺序定义一个枚举 public enum Risk {高风险,中风险,一般风险,低风险 } public static void main(String[] args) { }3.main方法里实现如下…...
figma的drop shadow x:0 y:4 blur:6 spread:0 如何写成css样式
figma的drop shadow x:0 y:4 blur:6 spread:0 如何写成css样式 在CSS中,我们可以使用box-shadow属性来模拟Figma中的Drop Shadow效果。box-shadow属性接受的值分别是:横向偏移、纵向偏移、模糊半径、扩展半径和颜色。 但是,Figma的Drop Sha…...
基于Matlab 疲劳驾驶检测
Matlab 疲劳驾驶检测 课题介绍 该课题为基于眼部和嘴部的疲劳驾驶检测。带有一个人机交互界面GUI,通过输入视频,分帧,定位眼睛和嘴巴,通过眼睛和嘴巴的张合度,来判别是否疲劳。 二、操作步骤 第一步:最…...
Linux内核.之 init文件,/init/main.c
想要熟悉内核,看下源码,就非常清晰 Linux内核,head.s,汇编启动cpu相关设置后,启动init文件里的,文件在内核的/init/main.c,看下main函数,做了哪些工作 // SPDX-License-Identifier: …...
CentOS系统中查看内网端口映射的多种方法
在网络管理中,了解和控制内网端口映射是至关重要的。本文将为您详细介绍在CentOS系统中查看内网端口映射的多种方法,助您提升网络管理效率。 使用netstat命令查看端口映射 netstat是一个强大的网络诊断工具。要查看当前的端口映射情况,可以在…...
Mac中禁用系统更新
Mac中禁用系统更新 文章目录 Mac中禁用系统更新1. 修改hosts,屏蔽系统更新检测联网1. 去除系统偏好设置--系统更新已有的小红点标记 1. 修改hosts,屏蔽系统更新检测联网 打开终端,执行命令: sudo vim /etc/hosts127.0.0.1 swdis…...
GoogLeNet-水果分类
GoogLeNet-水果分类 1.数据集 官方下载地址:https://www.kaggle.com/datasets/karimabdulnabi/fruit-classification10-class?resourcedownload 备用下载地址:https://www.123684.com/s/xhlWjv-pRAPh 介绍: 十个类别:苹果、…...
深度学习入门指南:一篇文章全解
目录 0.前言 1.深度学习的背景历史 2.深度学习主要研究的内容 3.深度学习的分支 3.1.卷积神经网络(CNN) 3.2 递归神经网络(RNN) 3. 3长短期记忆网络(LSTM) 4.深度学习的主要应用 4.1计算机视觉 4…...
java ssm 医院病房管理系统 医院管理 医疗病房信息管理 源码 jsp
一、项目简介 本项目是一套基于SSM的医院病房管理系统,主要针对计算机相关专业的和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本、软件工具等。 项目都经过严格调试,确保可以运行! 二、技术实现 后端技术&#x…...
钩子函数的使用
钩子函数在计算机科学和软件工程中,特别是在编程框架和库中,是一种特殊的函数或方法,它们允许用户在框架或库的特定点插入自定义代码。这些钩子提供了一种扩展框架功能而无需修改其源代码的方式。 在前后端分离的项目中,如使用Dj…...
【Docker】自定义网络:实现容器之间通过域名相互通讯
文章目录 一. 默认网络:docker0网络的问题二. 自定义网络三. nginx容器指之间通过主机名进行内部通讯四. redis集群容器(跳过宿主机)内部网络通讯1. 集群描述2. 基于bitnami镜像的环境变量快速构建redis集群 一. 默认网络:docker0…...
护理陪护系统|护理陪护软件|陪护软件
在当今社会,随着人口老龄化的加剧和生活节奏的加快,护理陪护服务的需求日益增长。为了满足这一需求,开发定制一套高效、专业的护理陪护系统显得尤为重要。在开发过程中,有几个关键方面不能忽视。 一、用户需求分析 护理陪护系统的…...
苍穹外卖-账号被锁定怎么办?
刚刚解决的小问题, 最近在搞黑马程序员的苍穹外卖项目, 在完善开发编辑员工功能的时候, 不知道怎么搞的, 无论是swagger接口测试, 还是前后端联调, 都显示"账号被锁定", 原本想在网上找找解释, 结果我太笨, 搜不到, 那就只能在代码里面排查咯, 既然是登录接口出…...
webpack loader全解析,从入门到精通(10)
webpack 的核心功能是分析出各种模块的依赖关系,然后形成资源列表,最终打包生成到指定的文件中。更多复杂的功能需要借助 webpack loaders 和 plugins 来完成。 1. 什么是 Loader Loader 本质上是一个函数,它的作用是将某个源码字符串转换成…...
python机器人Agent编程——实现一个本地大模型和爬虫结合的手机号归属地天气查询Agent
目录 一、前言二、准备工作三、Agent结构四、python模块实现4.1 实现手机号归属地查询工具4.2实现天气查询工具4.3定义创建Agent主体4.4创建聊天界面 五、小结PS.扩展阅读ps1.六自由度机器人相关文章资源ps2.四轴机器相关文章资源ps3.移动小车相关文章资源ps3.wifi小车控制相关…...
【动态规划】斐波那契数列模型总结
一、第 N 个泰波那契数 题目链接: 第 N 个泰波那契数 题目描述: 题目分析: 1、状态表示: dp[i] 表示:第 i 个斐波那契数的值 2、状态转移方程: 由题意可知第 i 个数等于其前三个数之和 dp[i] dp[i-…...
EasyUI弹出框行编辑,通过下拉框实现内容联动
EasyUI弹出框行编辑,通过下拉框实现内容联动 需求 实现用户支付方式配置,当弹出框加载出来的时候,显示用户现有的支付方式,datagrid的第一列为conbobox,下来选择之后实现后面的数据直接填充; 点击新增:新…...
Tegra K1深度解析:192核GPU如何重塑移动游戏与异构计算
1. 项目概述:一次移动游戏体验的底层革命 2014年,当小米发布其首款平板电脑MiPad,英伟达(Nvidia)同步推出Shield Tablet时,整个移动计算领域,尤其是安卓游戏生态,感受到了一次来自底…...
避坑指南:ArcGIS处理SRTM DEM时空间参考丢失、裁剪异常的终极解决方案
ArcGIS处理SRTM DEM数据避坑实战手册:从空间参考丢失到精准裁剪的全流程解析 当你从NASA官网下载了SRTM DEM数据,满心欢喜地准备进行地形分析时,是否遇到过这些"玄学"问题?裁剪后的中国地图边界莫名其妙偏移了几百公里&…...
北京AGG专用配件哪家性价比高
在选择AGG聚砂吸声系统的专用配件时,不少工程方和设计师都会问“北京哪家性价比高”。我的建议是:别只看标价,要看配件与系统的适配度、长期使用的稳定性,以及能否提供及时的技术支持。AGG系统本身是一个完整的声学解决方案&#…...
ADB 配置 + 入门使用全攻略,零基础看完就精通
一、ADB简介 1、什么是adb ADB 全称为 Android Debug Bridge,起到调试桥的作用,是一个客户端-服务器端程序。其中客户端是用来操作的电脑,服务端是 Android 设备。 ADB 也是 Android SDK 中的一个工具,可以直接操作管理 Androi…...
Groops实战入门:从源码编译到首个PPP案例运行
1. 认识Groops:GNSS数据处理的神器 第一次听说Groops这个软件时,我和大多数GNSS新手一样一脸茫然。直到导师扔给我一堆GRACE卫星数据,要求做精密单点定位分析时,才真正开始接触这个工具。Groops全称是Gravity Recovery Object-Ori…...
别再瞎写 Prompt 了:2026年最实用的10条LLM提示词技巧
别再瞎写 Prompt 了:2026年最实用的10条LLM提示词技巧强烈推荐收藏!从 OpenAI 官方指南到社区实践精华,每条技巧都附带 ❌ 错误示范 → ✅ 正确示范 → 💡 原理说明。这个问题你肯定遇到过 你打开 ChatGPT,输入&#x…...
Docker多阶段构建与镜像优化实战
Docker多阶段构建与镜像优化实战:从1GB到50MB的瘦身之旅 🐳 镜像太大?构建太慢?安全隐患太多?本文通过真实 Node.js + Python 项目,手把手教你用多阶段构建把 Docker 镜像从 1GB 压缩到 50MB,附带完整的优化策略和踩坑指南。 一、为什么你的 Docker 镜像这么大? 很多…...
HDFS源码(二)
DataNode启动源码 创建HttpServer 初始化DataNode Rpc服务 获取NameNode Rpc代理 Datanode向NameNode注册 DataNode与NameNode周期心跳及block块汇报 数据上传源码 创建文件系统及初始化DFSClient 连接NN创建目录 启动DataStreamer线程 向dataQueue队列中写入packet 设置副本写…...
开关电源传导共模噪声抑制:Y电容原理、安规限制与EMI滤波器设计
1. 项目概述:理解隔离式开关电源中的传导共模噪声在开发离线式开关电源,比如我们常见的手机充电器、笔记本电脑适配器或者工业电源模块时,工程师们常常会遇到一个既棘手又必须解决的难题:传导电磁干扰(Conducted EMI&a…...
构建个人代码知识库:codesift工具的设计理念与高效实践
1. 项目概述:从代码仓库到个人知识库的进化最近在整理自己过去几年写过的代码片段、工具脚本和项目配置时,发现了一个普遍存在的痛点:这些零散的“智慧结晶”散落在硬盘的各个角落、不同的Git仓库里,甚至有些只存在于模糊的记忆中…...
