在c#控制台中使用Raylib-cs库,绘制控制小球和插入音频(附带c++中小球的控制代码)

下载网址

GitHub - chrisdill/raylib-cs: C# bindings for raylib, a simple and easy-to-use library to learn videogames programming

克隆库

克隆GitHub仓库-CSDN博客

1 .制作dll

点击

生成之后就会多出这些东西

2.在项目中添加dll

然后就导进来了

测试一下用例代码

using Raylib_cs;namespace HelloWorld;class Program
{public static void Main(){Raylib.InitWindow(800, 480, "Hello World");while (!Raylib.WindowShouldClose()){Raylib.BeginDrawing();Raylib.ClearBackground(Color.White);Raylib.DrawText("Hello, world!", 12, 12, 20, Color.Black);Raylib.EndDrawing();}Raylib.CloseWindow();}
}

会发现现在还有问题

找不到dll库

是因为版本不对,这个是6.0的库

右键->管理 NuGet 程序包(N)

下载第二个,下载完以后就不会报错了

运行

小框出来哩

游戏:视觉,操作,音频

 3.Raylib基本图形绘制方法

3.1二维图形绘制基础

// 初始化窗口参数
int screenWidth = 800;
int screenHeight = 450;
InitWindow(screenWidth, screenHeight, "Example Window");// 设置绘图颜色
SetTargetFPS(60); // 设置帧率
Color color = new Color(255, 0, 0, 255); // 红色// 主循环
while (!WindowShouldClose()) // 检查窗口是否关闭
{// 绘制背景色ClearBackground(RAYWHITE); // 清除屏幕为白色// 绘制一条线DrawLine(10, 10, screenWidth - 10, screenHeight - 10, color);// 更新屏幕BeginDrawing();EndDrawing();
}// 关闭窗口并释放资源
CloseWindow();

 3.1.1绘制线条、圆形和多边形

绘制一条从坐标(100,100)到(200,200)的线条

DrawLine(100, 100, 200, 200, Color.RED);

绘制一个位于坐标(160, 160)、半径为60像素

DrawCircle(160, 160, 60, Color.BLUE);

绘制一个四边形( DrawPoly函数需要一系列的点来定义多边形的形状和顶点。这些点是按照顺序连接的)

Vector2[] points = { new Vector2(200, 200), new Vector2(250, 300), new Vector2(300, 200), new Vector2(250, 100) };
DrawPoly(points, 4, Color.GREEN);

3.1.2 颜色设置和纹理贴图(即,插入图片)

红、绿、蓝以及透明度(RGBA)

Color myColor = new Color(255, 165, 0, 255); //橙色,不透明

Raylib支持纹理贴图,使用 DrawTexture 函数可以将纹理绘制到屏幕上,此函数需要一个 Texture2D对象和两个点坐标作为参数,这两个点定义了纹理在屏幕上的位置。

例如,加载一张名为"myTexture"的纹理并将其绘制到屏幕上的坐标(100,100)可以这样操作:(Color.WHITE 代表贴图颜色)

Texture2D myTexture = LoadTexture("myTexture.png");
DrawTexture(myTexture, 100, 100, Color.WHITE);

交互式图形元素的创建

 鼠标和键盘事件响应

鼠标事件处理通常涉及 WindowShouldClose 、 IsMouseButtonPressed 、 GetMousePosition 等函数。例如,要创建一个简单的交互式图形元素,当用户点击该元素时,执行某些操作,可以编写如下代码:

Vector2 position = new Vector2(300, 200); //元素位置
Vector2 size = new Vector2(50, 50); //元素大小// 检测鼠标点击
if(IsMouseButtonPressed(MouseButton.MOUSE_LEFT_BUTTON) && 
CheckCollisionPointRec
(GetMousePosition(), new Rectangle(position.X,position.Y, size.X, size.Y)))
{// 在此处添加点击后的操作代码
}

对于键盘事件, IsKeyPressed 和 GetKeyPressed 等函数可以检测按键是否被按下,并可取得被按下的按键。这对于开发游戏和交互式应用尤为有用。例如,创建一个程序,当按下空格键时,输出一条消息,代码如下:

if(IsKeyPressed(KeyboardKey.KEY_SPACE))
{Console.WriteLine("Space key was pressed!");
}

5. 插入音频

初始化和声音加载

Raylib支持多种音频格式,包括WAV和OGG等常见格式。加载音频文件到游戏中,可以通过 LoadSound 函数实现。加载完成后,音频文件被封装为一个Sound对象,供后续播放使用

//初始化音源播放器
Raylib.InitAudioDevice();
//声音来源
Sound bgm = Raylib.LoadSound("D:\\code\\C_base_509class\\Assert\\bgm.mp3");
Sound att = Raylib.LoadSound("D:\\code\\C_base_509class\\Assert\\M4.wav");
Sound jump = Raylib.LoadSound("D:\\code\\C_base_509class\\Assert\\bam.mp3");

声音音量调节和播放

音频播放控制包括开始播放、暂停、继续播放和停止等操作。 PlaySound 函数用于开始播放音频,而 StopSound 则停止播放。音效的同步指的是确保音效与游戏中的动作一致,Raylib通过 UpdateSound 和 SetSoundVolume 等函数支持这些操作。

Raylib.SetSoundVolume(bgm, 0.1f);//调节音量
Raylib.PlaySound(bgm);//开始播放
StopSound(sound); // 停止播放

内存回收

 //内存回收Raylib.UnloadSound(bgm);Raylib.UnloadSound(att);Raylib.UnloadSound(jump);Raylib.CloseAudioDevice();

整体代码

using Raylib_cs;
class Program
{public static void Main(){int hight = 450;int width = 800;Raylib.InitWindow( width, hight ,"小游戏");//初始化音源播放器Raylib.InitAudioDevice();//声音来源Sound bgm = Raylib.LoadSound("D:\\code\\C_base_509class\\Assert\\bgm.mp3");Sound att = Raylib.LoadSound("D:\\code\\C_base_509class\\Assert\\M4.wav");Sound jump = Raylib.LoadSound("D:\\code\\C_base_509class\\Assert\\bam.mp3");float posX = 400;float posY = 225;float radiu = 50;float jumpForce = 50;float gravity = 9.8f;bool bgmShouldPlay = true;Raylib.SetSoundVolume(bgm, 0.1f);Raylib.PlaySound(bgm);//视窗对焦  while (!Raylib.WindowShouldClose()){float detaTime = Raylib.GetFrameTime();Raylib.BeginDrawing();Raylib.ClearBackground(Color.White);if(Raylib.IsKeyDown(KeyboardKey.Space)){// Console.WriteLine(1);posY=posY-jumpForce*detaTime;Raylib.SetSoundVolume(jump, 1.5f);Raylib.PlaySound(jump);}if(posY<=hight-radiu){posY=posY+gravity*detaTime;}if(Raylib.IsMouseButtonDown(MouseButton.Left)){Raylib.PlaySound(att);// Console.WriteLine("射击");}if(Raylib.IsSoundPlaying(bgm)==false && bgmShouldPlay){Raylib.PlaySound(bgm);}//画小球Raylib.DrawCircle((int)posX, (int)posY, radiu, Color.Orange);Raylib.DrawText("Hello, world!", 12, 12, 20, Color.Black);Raylib.EndDrawing();}//内存回收Raylib.UnloadSound(bgm);Raylib.UnloadSound(att);Raylib.UnloadSound(jump);Raylib.CloseAudioDevice();Raylib.CloseWindow();}
}

 在c++中绘制和控制小球

#ifndef CIRCLE_H_
#define CIRCLE_H_
float posX = 400;
float posY = 225;
float speed = 50.0f;
float moveX = 0;
float moveY = 0;void ProccInput();
void DoLogic(float dt);
void Draw();#endif#include "../include/raylib.h"
#include <stdio.h>
#include"circle.h"int main()
{InitWindow(800, 450, "Window");//===主循环while (!WindowShouldClose()){float deltaTime = GetFrameTime();//x += deltaTime * 100;//处理输入控制ProccInput();//===处理逻辑(不可见数据变化)DoLogic(deltaTime);BeginDrawing();ClearBackground(RAYWHITE);//===渲染Draw();EndDrawing();}CloseWindow();return 0;
}void ProccInput()
{// 重置移动方向moveX = 0;moveY = 0;//输入控制:按住WASD控制小球{if (IsKeyDown(KEY_A)){moveX = -1;}else if (IsKeyDown(KEY_D)){moveX = +1;}if (IsKeyDown(KEY_S)){moveY = +1;}else if (IsKeyDown(KEY_W)){moveY = -1;}}
}void DoLogic(float dt)
{//根据move移动小球posX = posX + moveX * speed * dt;posY = posY + moveY * speed * dt;
}void Draw()
{//多种表现1.图像DrawCircle((int)posX,(int)posY,50,BLUE);//2.文字//printf("posX: %f,posY: %f",posX,posY);
}

在里面挑出来一些我能用到的,学习参考链接:https://blog.csdn.net/weixin_35826166/article/details/143823025

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/485585.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【开源免费】基于Vue和SpringBoot的服装生产管理系统(附论文)

博主说明&#xff1a;本文项目编号 T 066 &#xff0c;文末自助获取源码 \color{red}{T066&#xff0c;文末自助获取源码} T066&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析…

【漫话机器学习系列】Adaboost算法

Adaboost&#xff08;Adaptive Boosting&#xff09;是一种经典的集成学习方法&#xff0c;主要思想是通过将多个弱学习器&#xff08;通常是简单模型&#xff0c;如决策树桩&#xff09;加权组合&#xff0c;来提升整体模型的预测能力。Adaboost 是一种自适应的学习方法&#…

WebStorm快捷键保持跟Idea一致

修改连续行局部多选 在WebStorm中同时按下ctrl alt s&#xff1b; 选择KeyMap 输入Column Selection Mode选择快捷键, 右键选择Add Mouse Shortcut 按下alt 鼠标左键 如果出现占用的情况&#xff0c;直接删除其他使用该快捷键的地方即可&#xff1b; 修改跨行局部多选 在…

图的遍历之DFS邻接矩阵法

本题要求实现一个函数&#xff0c;对给定的用邻接矩阵存储的无向无权图&#xff0c;以及一个顶点的编号v&#xff0c;打印以v为起点的一个深度优先搜索序列。 当搜索路径不唯一时&#xff0c;总是选取编号较小的邻接点。 本题保证输入的数据&#xff08;顶点数量、起点的编号等…

如何解决java.lang.UnsatisfiedLinkError:org.hyperic.sigar.ProcStat.gather问题

在新装的centos7.4服务器上部署部署应用系统&#xff0c;应用系统系统启动报错&#xff1a;“java.lang.UnsatisfiedLinkError:org.hyperic.sigar.ProcStat.gather” 一、报错分析 java.lang.UnsatisfiedLinkError通常是由于Java程序无法找到、加载或链接到所需的本地库而引发的…

Qt Chart 模块化封装曲线图

一 版本说明 此文档会从头到尾演示创建初始化流程 二 完成示例 此文章包含:曲线轴设置,曲线切换,单条曲线显示,坐标轴。。。 三 曲线图UI创建 在UI界面拖放一个QWidget,然后在 Widget里面放一个 graphicsView 四 代码介绍 1 头文件 #include <QString> #includ…

【时时三省】(C语言基础)结构体内存对齐

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 我们已经掌握了结构体的基本使用了。现在我们深入讨论一个问题&#xff1a;计算结构体的大小。 这也是一个特别热门的考点&#xff1a;结构体内存对齐 示例&#xff1a; 第一个s如果根据字…

云数据库 MongoDB

MongoDB 是一个基于文档的 NoSQL 数据库&#xff0c;它与传统的关系型数据库不同&#xff0c;采用的是灵活的文档结构&#xff08;类似 JSON 格式&#xff09;。MongoDB 是开源的&#xff0c;且高度可扩展&#xff0c;通常用于处理大量的非结构化或半结构化数据。 云数据库 Mon…

第一个 JSP 程序

一个简单的 JSP 程序&#xff1a; 使用 IDEA 开发工具新建一个 maven 项目&#xff0c;具体操作如图所示&#xff1a; 配置 Tomcat 服务器 项目结构如下图所示&#xff1a; 3. 修改 index.jsp 页面的代码&#xff1a; <% page language"java" contentType&q…

项目代码第2讲:从0实现LoginController.cs,UsersController.cs、User相关的后端接口对应的前端界面

一、User 1、使用数据注解设置主键和外键 设置主键&#xff1a;在User类的U_uid属性上使用[Key]注解。 设置外键&#xff1a;在Order类中&#xff0c;创建一个表示外键的属性&#xff08;例如UserU_uid&#xff09;&#xff0c;并使用[ForeignKey]注解指定它引用User类的哪个…

【NLP 9、实践 ① 五维随机向量交叉熵多分类】

目录 五维向量交叉熵多分类 规律&#xff1a; 实现&#xff1a; 1.设计模型 2.生成数据集 3.模型测试 4.模型训练 5.对训练的模型进行验证 调用模型 你的平静&#xff0c;是你最强的力量 —— 24.12.6 五维向量交叉熵多分类 规律&#xff1a; x是一个五维(索引)向量&#xff…

01-Chromedriver下载与配置(mac)

下载地址&#xff1a; 这里我用的最后一个&#xff0c;根据自己chrome浏览器选择相应的版本号即可 ChromeDriver官网下载地址&#xff1a;https://sites.google.com/chromium.org/driver/downloads ChromeDriver官网最新版下载地址&#xff1a;https://googlechromelabs.git…

Redis(上)

Redis 基础 什么是 Redis&#xff1f; Redis &#xff08;REmote DIctionary Server&#xff09;是一个基于 C 语言开发的开源 NoSQL 数据库&#xff08;BSD 许可&#xff09;。与传统数据库不同的是&#xff0c;Redis 的数据是保存在内存中的&#xff08;内存数据库&#xf…

JS学习(1)(基本概念与作用、与HTML、CSS区别)

目录 一、JavaScript是什么&#xff1f; &#xff08;1&#xff09;基本介绍 &#xff08;2&#xff09;简称&#xff1a;JS&#xff1f; 二、JavaScript的作用。 三、HTML、CSS、JS之间的关系。 &#xff08;1&#xff09;html、css。 &#xff08;2&#xff09;JavaScript。 …

使用AI工具Screenshot to Code将UI设计图翻译成代码

一、获取openAI apikey。 一般有两种方式&#xff0c;一种是到openAI官网注册账号&#xff0c;付费申请GPT4的apikey。另一种是某宝买代理。我这里采用第二种。 二、安装Screenshot to Code 1.到github下载源码。 2.启动&#xff0c;两种方式&#xff1a;源码启动和docker启动…

ETCD的封装和测试

etcd是存储键值数据的服务器 客户端通过长连接watch实时更新数据 场景&#xff1a; 当主机A给服务器存储 name&#xff1a; 小王 主机B从服务器中查name ,得到name-小王 当主机A更改name 小李 服务器实时通知主机B name 已经被更改成小李了。 应用&#xff1a;服务注册与发…

Github 2024-12-01 开源项目月报 Top20

根据Github Trendings的统计,本月(2024-12-01统计)共有20个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Python项目10TypeScript项目9Go项目2HTML项目1Shell项目1Jupyter Notebook项目1屏幕截图转代码应用 创建周期:114 天开发语言:TypeScript, Py…

李飞飞:Agent AI 多模态交互的前沿探索

发布于:2024 年 11 月 27 日 星期三 北京 #RAG #李飞飞 #Agent #多模态 #大模型 Agent AI在多模态交互方面展现出巨大潜力,通过整合各类技术,在游戏、机器人、医疗等领域广泛应用。如游戏中优化NPC行为,机器人领域实现多模态操作等。然而,其面临数据隐私、偏见、可解释性…

C语言期末考试——重点考点

目录 1.C语言的结构 2.三种循环结构 3.逻辑真假判断 4. printf函数 5. 强制类型转化 6. 多分支选择结构 7. 标识符的定义 8. 三目运算符 1.C语言的结构 选择结构、顺序结构、循环结构 2.三种循环结构 for、while、do-while 3.逻辑真假判断 C语言用0表示false,用非0(不…

ansible基础教程(下)

一、playbook 简介&#xff1a; playbook 是 ansible 用于配置&#xff0c;部署&#xff0c;和管理被控节点的剧本。 通过 playbook 的详细描述&#xff0c;执行其中的一系列 tasks &#xff0c;可以让远端主机达到预期的状态。 使用场景&#xff1a; 像执行shell命令与写…