下载网址
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