在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.mzph.cn/pingmian/62730.shtml

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

相关文章

「Mac畅玩鸿蒙与硬件40」UI互动应用篇17 - 照片墙布局

本篇将带你实现一个简单的照片墙布局应用&#xff0c;通过展示多张图片组成照片墙效果&#xff0c;用户可以点击图片查看其状态变化。 关键词 UI互动应用照片墙布局Grid 布局动态图片加载用户交互 一、功能说明 照片墙布局应用的特点&#xff1a; 动态加载多张图片组成网格布…

数字图像处理(12):灰度二值化

灰度像素&#xff1a;在 RGB 颜色模型下&#xff0c;图像中每个像素颜色的 R、G、B 三种基色的分量值相等的像素。由灰度像素组成的灰度图像只能表现256中颜色&#xff08;或亮度&#xff09;&#xff0c;通常把灰度图像中像素的亮度称为灰度值。灰度化处理&#xff1a;是指把彩…

华为新手机和支付宝碰一下 带来更便捷支付体验

支付正在变的更简单。 11月26日&#xff0c;华为新品发布会引起众多关注。发布会上&#xff0c;华为常务董事余承东专门提到&#xff0c;华为Mate 70和Mate X6折叠屏手机的“独门支付秘技”——“碰一下”&#xff0c;并且表示经过华为和支付宝的共同优化&#xff0c;使用“碰…

Redis开发05:使用stackexchange.redis库对redis进行增删改查

一、安装第三方库 二、官网 StackExchange.Redis |通用型 redis 客户端 三、连接示例 private static string redisConnectionString "localhost:6379,passwordyourpassword,defaultDatabase0,allowAdmintrue,asyncTimeout10000";private static string redisConn…

Electron + vue3 打包之后不能跳转路由

路由不跳转问题原因&#xff1a; 是因为electron需要将vue-router的mode调整为hash模式(两种写法) export default new Router({mode: hash, //这里history修改为hashscrollBehavior: () > ({y: 0}),routes: constantRouterMap, }) export default new createRouter({his…

React第十节组件之间传值之context

1、Context 使用creatContext() 和 useContext() Hook 实现多层级传值 概述&#xff1a; 在我们想要每个层级都需要某一属性&#xff0c;或者祖孙之间需要传值时&#xff0c;我们可以使用 props 一层一层的向下传递&#xff0c;或者我们使用更便捷的方案&#xff0c;用 creatC…

基于群晖搭建个人图书架-TaleBook based on Docker

前言 在群晖Container Manager中部署失败&#xff0c;转通过ssh部署。 一、准备工作 名称备注群晖SSH“终端机和SNMP”中启用SSH软件secureCRT等docker-compose.ymlGithub下载并修改 二、过程 2.1 创建本地文件夹 本地路径为&#xff1a; /docker/Calibre/data 2.2 下载d…

【JavaEE】JavaEE、web 开发、框架(Spring) 、Maven

文章目录 一、JavaEE 发展历程二、什么是 web 开发1、什么是 web 开发&#xff1f;2、web 网站的工作流程 三、框架1、什么是框架&#xff1f;2、为什么要学框架&#xff1f;3、框架的优点&#xff08;Spring Boot VS Servlet&#xff09; 四、Maven 一、JavaEE 发展历程 Java…

vue3项目中使用星火API

在node环境epxress中使用讯飞ai接口进行二次封装&#xff0c;通过ai对话回复提取&#xff0c;获得ai提取的文章摘要 本文章只是简单使用&#xff0c;更复杂功能比如调用星火API制作对话机器人可以查看文档&#xff0c;对于初次使用星火AI接口或许有帮助 讯飞星火大模型API-大模…

基于centos7.9容器编排Jumpserver堡垒机

Jum 基础环境容器化部署MySQL容器化部署Redis容器化部署Nginx容器化部署Koko容器化部署Guacamole容器化部署Core编排compose文件 基础环境 基于centos7.9容器化部署jumpserver tar -xf JumpServer.tar.gz导入centos7.9 docker镜像 docker load -i images/centos_7.9.2009.ta…

5G学习笔记之PRACH

即使是阴天&#xff0c;也要记得出门晒太阳哦 目录 1. 概述 2. PRACH Preamble 3. PRACH Preamble 类型 3.1 长前导码 3.2 短前导码 3.3 前导码格式与小区覆盖 4. PRACH时频资源 4.1 小区所有可用PRACH资源 4.2 SSB和RACH的关系 4.3 PRACH时频资源配置 1. 概述 随机接入…

14 - Java 面向对象(中级)

包&#xff08;package&#xff09; 声明 java的包&#xff0c;类似电脑系统中的文件夹&#xff0c;包里存放的是类文件。 当类文件很多的时候&#xff0c;通常会采用多个包进行存放管理&#xff0c;这种方式称为分包管理。 在项目中&#xff0c;我们将相同功能的类放到一个…

「Mac畅玩鸿蒙与硬件34」UI互动应用篇11 - 颜色选择器

本篇将带你实现一个颜色选择器应用。用户可以从预设颜色中选择&#xff0c;或者通过输入颜色代码自定义颜色来动态更改界面背景。该应用展示了如何结合用户输入、状态管理和界面动态更新的功能。 关键词 UI互动应用颜色选择器状态管理用户输入界面动态更新 一、功能说明 颜色…

【Maven】依赖冲突如何解决?

准备工作 1、创建一个空工程 maven_dependency_conflict_demo&#xff0c;在 maven_dependency_conflict_demo 创建不同的 Maven 工程模块&#xff0c;用于演示本文的一些点。 什么是依赖冲突&#xff1f; 当引入同一个依赖的多个不同版本时&#xff0c;就会发生依赖冲突。…

【Vue3】从零开始创建一个VUE项目

【Vue3】从零开始创建一个VUE项目 手动创建VUE项目附录 package.json文件报错处理: Failed to get response from https://registry.npmjs.org/vue-cli-version-marker 相关链接&#xff1a; 【VUE3】【Naive UI】&#xff1c;NCard&#xff1e; 标签 【VUE3】【Naive UI】&…

Pytorch-GPU版本离线安装

最近在复现一项深度学习的工作&#xff0c;发现自己的pytorch是装的cpu版的(好像当时是直接加清华源&#xff0c;默认是cpu版本&#xff09;。从官网在线下载速度太慢&#xff0c;还时不时断开连接&#xff0c;我们可以配置conda的清华源去这个问题&#xff0c;但是考虑到是在用…

.NET周刊【11月第4期 2024-11-24】

国内文章 C# 入门深度学习&#xff1a;万字长文讲解微积分和梯度下降 https://www.cnblogs.com/whuanle/p/18551532 这篇文章主要介绍了使用 C# 进行深度学习的方法&#xff0c;特别是微积分在此领域的应用。作者简要讲解了极限、导数等基本概念&#xff0c;并展示了如何在 …

How to monitor Spring Boot apps with the AppDynamics Java Agent

本文介绍如何使用 AppDynamics Java 代理监视 Azure Spring Apps 中的 Spring Boot 应用程序。 使用 AppDynamics Java 代理可以&#xff1a; 监视应用程序使用环境变量配置 AppDynamics Java 代理 在 AppDynamics 仪表板中检查所有监视数据 How to monitor Spring Boot app…

使用ECharts创建带百分比标注的环形图

在数据可视化领域&#xff0c;环形图是一种非常有效的图表类型&#xff0c;它能够清晰地展示各部分与整体的关系。今天&#xff0c;我们将通过ECharts来创建一个带百分比标注的环形图&#xff0c;并详细解释如何实现这一效果。 1. 数据准备 首先&#xff0c;我们定义了一些基础…

基于LSTM的文本多分类任务

概述&#xff1a; LSTM&#xff08;Long Short-Term Memory&#xff0c;长短时记忆&#xff09;模型是一种特殊的循环神经网络&#xff08;RNN&#xff09;架构&#xff0c;由Hochreiter和Schmidhuber于1997年提出。LSTM被设计来解决标准RNN在处理序列数据时遇到的长期依赖问题…