C++ Sprites库角色命令一览表V1.0.0Beta(2025年12月15号版)

Sprite(角色/精灵)类方法简易教程。

1. Sprite (构造函数)
作用: 创建一个角色对象,并可选地关联到一个屏幕。
用法:
Sprite ket;:创建一个叫ket角色,选型默认是一枚小火箭。
Sprite t(“turtle”); //创建一个叫t的角色,造型是海龟。
Sprite t(“blank”); //创建一个叫t的角色,没有造型。
Sprite t{“res/turtle.png”}; //创建一个叫t角色,造型是res目录下面的turtle.png图片。

移动与方向控制
2. forward / fd
作用: 向当前朝向前进指定距离。
用法: sprite.fd(50);

3. backward / back / bk
作用: 向当前朝向后退指定距离。
用法: sprite.bk(30);

4. right / rt
作用: 向右旋转指定角度(顺时针)。
用法: sprite.rt(90); // 右转90度

5. left / lt
作用: 向左旋转指定角度(逆时针)。
用法: sprite.lt(45); // 左转45度

6. setheading / seth
作用: 设置角色的绝对朝向(0° 为正右方,90° 为正上方)。
用法: sprite.seth(0); // 面向右

7. heading
作用: 获取角色当前的朝向角度(0~360)。
用法: float angle = sprite.heading();

8. towards(x, y)
作用: 计算并返回从角色当前位置指向 (x, y) 点的角度。
用法: float angle = sprite.towards(100, 200);

画笔控制
9. isdown
作用: 判断画笔是否处于“落下”状态(即移动时会画线)。
用法: bool drawing = sprite.isdown();

10. penup / pu / up
作用: 抬起画笔,移动时不画线。
用法: sprite.penup();

11. pendown / pd / down
作用: 落下画笔,移动时会画线。
用法: sprite.pendown();

12. pensize / width
作用: 设置或获取画笔的粗细(像素)。
用法:
sprite.pensize(5);
int w = sprite.pensize();

13. pencolor
作用: 设置画笔颜色(支持字符串、RGB、HSL 等多种格式)。
用法:
sprite.pencolor(“red”);
sprite.pencolor(255, 0, 0);
sprite.pencolor(0); // HSL 色相 0(红)

14. penhue / pensat,penbhd / pentone / penshade
作用: 分别设置画笔颜色的 色相(Hue)、饱和度(Saturation)、色调(Tone)、明暗(Shade)。
用法: sprite.penhue(120); // 绿色系

15. coloradd(step)
作用: 颜色的色相增加(用于动态变色)。
用法: sprite.coloradd(1);

16. coloralpha / penalpha
作用: 设置画笔颜色的透明度(0~255,0 为完全透明)。
用法: sprite.penalpha(128);

17. fillcolor
作用: 设置填充颜色(用于 begin_fill/end_fill方法)。
用法: sprite.fillcolor(“blue”);

18. filling
作用: 判断当前是否处于填充模式(即是否已调用 begin_fill 但未调用 end_fill)。
用法: bool inFill = sprite.filling();

19. begin_fill / end_fill
作用: 开始/结束一个填充区域。两者之间的所有绘图路径将被 fillcolor 填充。
用法:
sprite.begin_fill();?sprite.circle(50);?sprite.end_fill();

20. dot(size, color)
作用: 在当前位置绘制一个实心圆点,size是直径。
用法: sprite.dot(20, “green”);

21. circle(radius) / arc(radius, angle)
作用:
circle: 绘制完整圆形。
arc: 绘制圆弧(指定角度)。
用法:
sprite.circle(30);
sprite.arc(40, 180); // 半圆

22. ellipse(a, b) / oval(a, b)
作用: 绘制椭圆(a 为长半轴,b 为短半轴)。
用法: sprite.ellipse(50, 30);

位置与坐标
23. home
作用: 将角色移回原点 (0, 0) 并重置朝向为 0°。
用法: sprite.home();

24. go / goxy / gotoxy / setxy / setpos / setposition
作用: 将角色移动到指定坐标 (x, y)。
用法: sprite.gotoxy(100, -50);

25. move(dx, dy)
作用: 相对当前位置在水平方向移动dx,在垂直方向移动dy。
用法: sprite.move(10, 20);

26. xcor / ycor / position / pos
作用: 获取角色的 X 坐标、Y 坐标或位置(Point 对象)。
用法:
float x = sprite.xcor();
std::pair<float,float> p = sprite.pos();

27. setx / gox / gotox
作用: 仅设置 X 坐标,Y 不变。
用法: sprite.setx(100);

28. sety / goy / gotoy
作用: 仅设置 Y 坐标,X 不变。
用法: sprite.sety(-30);

29. addx(dx) / addy(dy)
作用: 在当前 X/Y 坐标上增加偏移量。
用法: sprite.addx(5);

30. distance(x, y)
作用: 计算角色当前位置到 (x, y) 的欧氏距离。
用法: float d = sprite.distance(0, 0);

外观与造型
31. get_width / get_height
作用: 获取角色缩放后造型的原始宽高。
用法: int w = sprite.get_width();

32. scale(k) / shapesize(xscale,yscale)
作用:
scale: 统一设置 X/Y 方向的缩放比例。
shapesize: 分别缩放。
用法:
sprite.scale(2.0);
sprite.shapesize(0.5,2.0);

33. addshape(path) / removeshape(path)
作用: 动态添加或移除一个造型(图片)。
用法: sprite.addshape(“hero.png”);

34. next_costume / nextcostume / pre_costume / precostume
作用: 切换到下一个或上一个造型(用于动画)。
用法: sprite.nextcostume();

35. shape(path) / shapeindex()
作用:
shape: 设置当前造型为指定图片。
shapeindex: 返回当前造型的索引号。
用法: sprite.shape(“idle.png”);

36. show / hide / isvisible / ishide
作用: 显示/隐藏角色,或查询可见状态。
用法:
sprite.hide(); //角色是否隐藏
if (sprite.isvisible()) { … } //如果角色不可见

37. rotate_mode / rotatemode
作用: 设置旋转模式(如 0 自由旋转)。
用法: sprite.rotatemode(0);

38. rotate_center(offset_x, offset_y)
作用: 设置角色旋转的中心点(相对于角色原始造型中心点的水平与垂直偏移),同时角色也以这个点为基准坐标。
用法: sprite.rotate_center(0, 0); // 以中心为轴旋转

碰撞与边界
39. bbox()
作用: 获取角色在屏幕上的包围盒(SDL_Rect)。
用法: SDL_Rect box = sprite.bbox();

40. contain(cx, cy)
作用: 判断点 (cx, cy) 是否在角色的包围盒内。
用法: bool inside = sprite.contain(mouse_x, mouse_y);

41. rect_collide(other)
作用: 检测与另一个角色 other 是否发生矩形碰撞。
用法: if (sprite.rect_collide(&enemy)) { … }

42. bounce_on_edge()
作用: 如果角色碰到屏幕边缘,则自动反弹(改变朝向)。
用法: 在游戏循环中调用 sprite.bounce_on_edge();

图章(Stamp)
43. stamp()
作用: 在当前位置“盖章”,留下角色当前造型的静态图像。
用法: sprite.stamp();

44. clearstamp(id) / clearstamps()
作用:
clearstamp: 清除指定 ID 的图章。
clearstamps: 清除部分或者所有图章。
用法: sprite.clearstamps();

45. stampitems()
作用: 获取所有图章的 ID 列表。
用法: auto ids = sprite.stampitems();

高级绘图与填充
46. setpixel(color) / getpixel()
作用: 在角色所在画布位置上设置/获取像素颜色(注意:不是windows屏幕)。
用法: sprite.setpixel(“white”);

47. fill(…)
作用: 从角色当前位置开始进行泛洪填充(Flood Fill),填充封闭区域。
用法: sprite.fill(“yellow”);

48. color(r, g, b, a)
作用: 同时设置角色的画笔与填充颜色,有多种颜色表示方法。
用法: sprite.color(255, 0, 0, 255); //此处用的是r,g,b,a表示法

文本与显示
49. write(text, align, font, angle)
作用: 在角色当前位置书写文本。
参数:
text: 要写的字符串。
align: 对齐方式(如 “center”)。
font: 字体信息,如 {“宋体”, “24”, “bold”}。
angle: 文字旋转角度。
用法: sprite.write(“Hello!”, “center”, {“Arial”, “18”,”italic”});

状态与管理
50. speed(value)
作用: 设置角色移动和绘图的速度(内部可能影响延迟)。
用法: sprite.speed(10);

51. kill() / destroy() /isdestroyed
作用: kill是彻底销毁角色,destroy只清除角色占用的大部分内存资源,没有彻底delete它,而isdestroyed是标记角色为“已销毁”,后续可被delete。
用法: sprite.destroy(); if (sprite.isdestroyed()) { … }

52. set_tag(tag) / get_tag()
作用: 为角色设置/获取一个自定义标签(用于分类或识别)。
用法: sprite.set_tag(“player”);

53. get_screen() / getscreen()
作用: 获取角色所绑定的 Screen 对象。
用法: Screen* s = sprite.getscreen();

代理 Screen 方法(快捷调用)
以下方法实际上是调用其绑定的 Screen 对象的同名方法,提供便捷访问:

done() → screen->mainloop()
bgpic(path) → 设置背景图
title(s) → 设置窗口标题
setup(w, h) → 设置窗口大小
bgcolor(…) → 设置背景色
delay(ms) → 全局延迟
tracer(bool) → 设置自动刷新
wait(seconds) → 等待
update() → 手动刷新屏幕

这些方法让角色可以直接控制屏幕,无需持有 Screen 指针。

曲线绘图(高级)
54. bezierQuad(start, end, control)
作用: 绘制二次贝塞尔曲线。
用法: sprite.bezierQuad({0,0}, {100,100}, {50,200});

55. bezier / bezierCubic(start, end, ctrl1, ctrl2)
作用: 绘制三次贝塞尔曲线。
用法: sprite.bezier({0,0}, {100,100}, {30,200}, {70,-50});

56. bspline(controlPoints)
作用: 绘制B样条曲线(需要至少4个控制点)。
用法: sprite.bspline({{0,0}, {50,100}, {100,50}, {150,0}});

57. cubicspline(points)
作用: 绘制三次样条插值曲线(平滑通过所有给定点)。
用法: sprite.cubicspline({{0,0}, {50,80}, {100,20}, {150,100}});

58. 动态属性
作用: 给角色随时设立一个属性。角色有property映射(类似Python字典)。通过建立从字符串到字符串或者其它数据类型的映射来完成角色的动态属性设立。
用法:
#include “sprites.h” //包含C++精灵库
#include <string>
using namespace std;
Screen sc;
Sprite *bug = new Sprite();//new Sprite命令建立角色返回的地址给bug指针

int main(int argc,char** argv){ //命令行参数接收表
bug->property[“life”] = 10; //设生命有10条
while(true){
bug->property[“life”]–;
//to_string为把整数转换成字符串
sc.title(to_string(static_cast<int>(bug->property[“life”]))); //要用static_cast<int>强制转换
if(!bug->property[“life”]){ bug->kill();break;} //只有用new命令建立的角色才能用kill!
sc.wait(0.01);
}
sc.done();
return 0;
}

59. txt2png命令
作用:角色的txt2png命令能把文字转换成图像,生成的文字颜色采用角色的画笔颜色。
它会返回一个pair<int,int>,存储图像的宽度和高度,以下都是把”C++精灵库”转换成图片,共有三种用法:

//0表示颜色的色相,红色,也可用RGB等形式。
bug.color(0);
string s=”C++精灵库”;

//1. 默认字体风格,
// 自动生成输出文件名: “res/” + s + “_.png”
语法: bug.txt2png(s);

//2. 默认字体风格,但指定文件名
语法: bug.txt2png(s,”C:/pxC++编辑器.png”);

//3. 指定字体风格,指定文件名
语法: bug.txt2png(s,{“楷体”,”32″,”italic”}, “C:/pxC++编辑器.png”);

 

关于李兴球

李兴球的博客是Python创意编程原创博客
此条目发表在C++, 杂谈分类目录。将固定链接加入收藏夹。

发表回复