首页 > 其他分享 >raylib U1S02、在窗口上画小圆球

raylib U1S02、在窗口上画小圆球

时间:2024-12-23 15:31:19浏览次数:3  
标签:20 U1S02 img raylib texture 圆球 40 窗口 绘制

这篇笔记我们实现在窗口上画上几个小球,然后让小球反弹运动的功能。分成两个部分:

  • 第一部分简单说一下基本原理
  • 第二部分讲实现代码。

不喜欢看原理的同学可以直接跳到第二部分去。

原理

简单地理解,我们在计算机上看到的所有画面,都是计算机渲染出来的一个个图片,这些图片在屏幕上一张张被显示出来,当速度足够快的时候,人眼看起来就变成了动态的影像。

image

所以我们做界面,底层的原理就是把这每一个画面给设计好,然后交给计算机画出来。

画出第一个小球

先看一下画元素的生命周期

image

第一步,创建元素

首先,我们需要创建一个小球的元素,用来绘制到窗口上。这个动作分成两部分:先把图案画出来,然后创建显示的元素。

看一下创建元素的代码:

	//创建一个40*40,透明背景的图片
	Image img=GenImageColor(40,40,BLANK);
	//在图片中绘制一个以(20,20)为圆心,半径为20的红色圆
	ImageDrawCircle(&img,20,20,19,RED);
	
	//注意texture才是最终被画到窗口上的东西,
	Texture texture = LoadTextureFromImage(img);
	
	UnloadImage(img); //不再需要使用img了,释放掉

第二步,画到窗口上

根据上面讲的原理,咱们要在主循环里不停地去绘制

//开启程序的主循环
while (!WindowShouldClose()) {

	//绘制帧,这一Part都是放在循环的最后的
	BeginDrawing();//开始绘制
	ClearBackground(WHITE);//重新绘制一些背景。
	DrawTexture(texture,100,100,WHITE);//把咱们的小球元素画上去
	EndDrawing();//结束绘制
}

第三步,销毁元素

别看这一步就是个销毁,少了这一步程序就是个不完整的程序。

//释放texture对象
	UnloadTexture(texture);

看一下完整的代码

#include <raylib.h>
#include<bits/stdc++.h>
using namespace std;
#define WINDOW_WIDTH 800
#define WINDOW_HEIGHT 600
int main() {
	
	//初始化窗口
	InitWindow(WINDOW_WIDTH, WINDOW_HEIGHT,"Test");

	SetTargetFPS(60);
	
	//创建一个40*40,透明背景的图片
	Image img=GenImageColor(40,40,BLANK);
	//在图片中绘制一个以(20,20)为圆心,半径为20的红色圆
	ImageDrawCircle(&img,20,20,19,RED);
	
	//注意texture才是最终被画到窗口上的东西,
	Texture texture = LoadTextureFromImage(img);
	
	UnloadImage(img); //不再需要使用img,释放掉
	
	//开启程序的主循环
	while (!WindowShouldClose()) {
		
		
		//绘制帧,这一Part都是放在循环的最后的
		
		BeginDrawing();//开始绘制
		ClearBackground(WHITE);//重新绘制一些背景。
		DrawTexture(texture,100,100,WHITE);//把咱们的小球元素画上去
		EndDrawing();//结束绘制
	}
	
	//释放texture对象
	UnloadTexture(texture); 
	
	//关闭窗口
	CloseWindow();
	return 0;
}

标签:20,U1S02,img,raylib,texture,圆球,40,窗口,绘制
From: https://www.cnblogs.com/evencai/p/18624147

相关文章

  • 基于EasyX和Raylib的打字母游戏
    原版代码地址https://codebus.cn/yangw/letters-shooting-game基于Raylib实现时,由于Raylib需要显式设置FPS,getchar这样的调用是不能用的。因此一开始的welcom......
  • 基于EasyX和Raylib的鼠标操作
    EasyX提供的鼠标操作需要结合WindowsAPI使用,比较简陋。官方示例用法是在//https://codebus.cn/yangw/mouse-operation。Raylib可以提供强大的多的鼠标操作。不过......
  • 基于EasyX和Raylib的星空
    基于EasyX//程序名称:星空//编译环境:VisualC++6.0,EasyX_20200902//最后更新:2009-2-22//#include<graphics.h>#include<time.h>#include<conio.h>#define......
  • 基于EasyX和Raylib的字符阵
    字符阵是EasyX的经典样例程序:https://codebus.cn/yangw/character-matrix使用raylib替代easyx.除了常规的API替换,还需要额外调用SwapScreenBuffer().由于Dr......
  • 基于EasyX和Raylib的自由落体小球
    这个简陋的小游戏,在《C和C++游戏趣味编程》第三章,是逐次迭代写成的。这里贴出基于easyx和raylib的各自实现。基于EasyX//根据《C和C++游戏趣味编程》第二章仿......
  • 基于EasyX和Raylib的十字消除
    基于EasyX//根据《C和C++游戏趣味编程》第10章十字消除写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>#inc......
  • 基于EasyX和Raylib的别碰方块
    基于EasyX//根据《C和C++游戏趣味编程》第三章别碰方块写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>//检测按下了空格键voi......
  • 基于EasyX和Raylib的推箱子
    基于EasyX//根据《C和C++游戏趣味编程》第九章推箱子写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>//玩......
  • 基于EasyX和Raylib的坚持100秒
    EasyX//根据《C和C++游戏趣味编程》第12章坚持100秒写出#include<graphics.h>#include<conio.h>//_kbhit()#include<stdio.h>#include<stdlib.h>#include......
  • 基于EasyX和Raylib的字符雨
    思路按如下顺序尝试:绘制一个字符下落绘制4个字符(一列)的下落绘制20个字符(一列)的下落,并封装其位置更新、绘制的过程为Rain类的成员函数绘制多个雨滴每个雨滴在更新......