C++精灵库 其它命令等 教程,本教程已内置于pxC++编辑器内。
初级用户主要掌握三个命令即可。randint命令,返回整数区间内随机整数。
random命令,返回的是一定范围内的小数。oneof命令,返回两者之一。
1. to_world_xy
作用: 转换为世界坐标系。应用场景主要在在获取鼠标指针坐标时,得到的坐标是屏幕坐标系的,根据情况需要转换成世界坐标系。
用法:
int x=100,y=100; //这里x,y当成屏幕坐标系(左上角为原点,y轴向下为正)
to_world_xy(x,y); //x,y当成引用调用,调用后其值被改变
2. to_screen_xy
作用: 转换为屏幕坐标系。
用法:
int x=100,y=100; //这里x,y当成世界坐标系(中间为原点,y轴向上为正)
to_world_xy(x,y); //x,y当成引用调用,调用后其值被改变
3. randint
作用: 在整数区间[a,b]随机选择一个整数。
用法:
int x = randint(1,100);
4. random
作用: 在浮点数区间[a,b]随机选择一个浮点数。
用法:
float x = random(1.0,100.0);
5. oneof
作用: 在两个对象之间随机选择一个。
用法:
int x = oneof(32,76); //在两个整数之间选择一个
Sprite *p = oneof(&turtle,&rocket);//两个角色间选择一个,注意返回的是指针
6. inputbox
作用: 弹出一个输入框,让用户输入文本。
用法: std::string name = inputbox(“姓名”, “请输入您的名字:”);
7. messagebox
作用: 弹出一个消息提示框。
用法:
信息框: messagebox(“提示”, “操作成功!”);
警告框: messagebox(“警告”, “文件未找到!”, SDL_MESSAGEBOX_WARNING);
错误框: messagebox(“错误”, “发生致命错误!”, SDL_MESSAGEBOX_ERROR);
8. svg2png
作用: 把svg图转换成png图。
举例:
const char* inputSvgFile = “F:\\萍乡风火轮编程基地\\blank.svg”; //输入svg
const char* outputPngFile = “F:\\萍乡风火轮编程基地\\blank.png”; //输出png
float scaleFactor = 2.0f; // 缩放因子,这里放大2倍
svg2png(inputSvgFile, outputPngFile, scaleFactor);
成功则返回真,失败返回假。
9. Point类
作用: 描述一个二维坐标点
用法: Point p0 = (100.0,100.0);
std::cout << p0.x << std::endl; //输入p0点的x坐标
std::cout << p0.y << std::endl; //输入p0点的y坐标
sprite.go(p0); //让角到到达p0点
在C++精灵库中的定义:
struct Point {
double x, y;
Point();
Point(double x, double y);
………..高级用户有兴趣可查阅polygon_offset.h头文件
};
10. get_angle
作用: 接收不共线的三个点坐标,返回一个角度的大小。
用法: float angle = get_angle({1.0,0},{0,1.0},{0,0} ); //得到45度
11. Color类
作用: 描述一种颜色
用法:
int h = 0; //色相
Uint8 r,g,b; //红,绿,蓝
Color temp;
temp.hsvToRgb(h,1.0,1.0,r,g,b); //hsv转rgb
定义:
class Color {
private:
SDL_Color color;
public:
// 构造函数
Color(Uint8 r = 0, Uint8 g = 0, Uint8 b = 0, Uint8 a = 255);
Color(const SDL_Color& sdlColor);
// 获取SDL2库中的SDL_Color
SDL_Color get() const;
std::string gethex() const; //获取16进制RGB字符串
void rgbToHsv(Uint8 r, Uint8 g, Uint8 b, float& h, float& s, float& v) const;
void hsvToRgb(float h, float s, float v, Uint8& r, Uint8& g, Uint8& b) const;
……….高级用户有兴趣可查阅coloradd.h头文件学习SDL_Color等知识。
}
12. SDL_Rect
作用: 它是一个类,用于描述一个矩形
用法:
SDL_Rect r = {-200,20,400,40};//矩形左上角坐标是(-200,20),宽高是400×40。
std::cout << r.x << std::endl; // 矩形左上角x坐标
std::cout << r.y << std::endl; // 矩形左上角y坐标
std::cout << r.w << std::endl; // 矩形宽度
std::cout << r.h << std::endl; // 矩形高度
13. 关于HSV
请看示例程序:
/*
非bug提示,设为黑色或者灰色与白色时,再增加画笔颜色的色相,将不会增加。
这个”特性”不是bug,而是HSV/HSL颜色模型的数学特性在图形库中的正确实现。
如果你想看到颜色变化的效果,需要先设定一个非黑、非灰、非白的颜色(即饱和度不为0的颜色)。
*/
#include “sprites.h” //包含C++精灵库
Sprite rocket; //建立角色叫rocket
int main(){ //主功能块
rocket.pencolor(“black”).speed(0);
std::cout << “饱和度=” << rocket.pensat() << std::endl; //输出结果是0
std::cout << “色调=” << rocket.pentone() << std::endl; //输出结果是0
for(int i=0;i<360;i++)
//这个现象的本质不是coloradd()方法失效,
//而是基于HSV(色相 – 饱和度 – 明度)颜色模型的颜色属性特性
rocket.coloradd(1).fd(1);
rocket.done();
return 0;
}
14. 关于造型名字映射
在C++精灵库中,有几个特殊的字符串可以直接指定造型。
这些字符串是: bug,rocket,turtle,classic,arrow,triangle,blank,square,circle,star, pointer。
它们和图片路径的映射关系如下:
std::map<std::string,std::string> named_shapes= { {“bug”,”res/bug.png”}, {“rocket”,”res/rocket.png”},
{“turtle”,”res/turtle.png”}, {“classic”,”res/classic.png”}, {“arrow”,”res/arrow.png”},
{“triangle”,”res/triangle.png”}, {“blank”,”res/blank.png”}, {“square”,”res/square.png”},
{“circle”,”res/circle.png”},{“star”,”res/star.png”},{“pointer”,”res/pointer.png”} };
设角色名为rocket,用户可以往这个映射里增加一个键值对,如下所示:
named_shapes[“pig”] = “res/pig.png”;
然后就可以用代码:
rocket.shape(“pig”);
来设定rocket,让它的造型为res目录下面的pig.png图片了。
