这是有关创建交互式应用程序以解决
处理和
p5.js中 的马进程问题的 教程第一部分
创建一匹马-矩形rect()。 马用灰色圆圈表示。
rect(bx, by, boxSize, boxSize); fill(50);
让马在它经过的所有细胞上绘画,这就是
这里的样子。
接下来,在释放
mouseRealised()按钮时,将马匹吸引到笼子的中央。
添加
storX和
storY变量,
这些变量将存储光标所在的单元格的坐标。 如果按下左键,并且光标在马的上方,那么我们将当前单元格的坐标保存在变量
storX和
storY中 :
void mouseClick() { if (mouseX >= x && mouseX <= x+100 && mouseY >= y && mouseY <= y+100) { if (overBox && mousePressed && (mouseButton == LEFT)) { storX=x;
释放按钮时,坐标storX和storY将被加载到knightX和knightY骑士的坐标中。
knightX=storX; knightY=storY;
如果对于按下的按钮
状态存在标准的
mousePressed布尔变量,则对于按下的按钮
状态不存在这样的变量-自己创建:
boolean bool_mouseReleased;
现在,如果未按下鼠标按钮(即
bool_mouseReleased = true ),则使用坐标storX和storY绘制单元格
if((bool_mouseReleased ) && (x==storX && y==storY )){ modColor=200; }
在这里检查
第二部分
添加一个取消按钮。
这里是一个说明按钮操作的示例。
首先,创建
IntList列表,其中包含马所经过的
单元格坐标; 在左下角绘制按钮本身:
初始化清单
listOfCoordinatesX = new IntList(); listOfCoordinatesY = new IntList(); listOfCoordinatesX.append(0); listOfCoordinatesY.append(0);
在下一步的最后(释放鼠标按钮时),我们将单元格坐标添加到列表/堆栈中:
if(overKnight){ knightX=storX; knightY=storY; listOfCoordinatesX.append(int(knightX)); listOfCoordinatesY.append(int(knightY)); }
让我们创建一个布尔函数
overButton() ,如果鼠标光标在按钮上方,则返回true;而按钮
Update()函数将更新变量
boolButton void buttonUpdate() { if ( overButton(buttonX, buttonY, buttonSize, buttonSize) ) { boolButton = true; } else { boolButton = false; } } boolean overButton(int x, int y, int width, int height) { if (mouseX >= x && mouseX <= x+width && mouseY >= y && mouseY <= y+height) { return true; } else { return false; } }
变量和列表显示在控制台的主程序循环中:
println(boolButton); println(listOfCoordinatesX); println(listOfCoordinatesY);
在这里检查
第三部分
单击取消按钮时,添加跳到上一个单元格的功能。
在
mousePressed()函数中,
我们检查是否已按下取消按钮。 如果按下该按钮,则如果坐标列表中有多个元素,则从坐标列表(堆栈顶部)中删除最后一个元素:
if(boolButton && listOfCoordinatesX.size()>1) { listOfCoordinatesX.pop(); listOfCoordinatesY.pop(); }
当您单击
Module类的
mouseClick()方法中的取消按钮时,我们将坐标列表的元素(堆栈顶部)保存到
storX和
storY变量中:
if(boolButton && mousePressed) { storX= listOfCoordinatesX.get(listOfCoordinatesX.size()-1); storY= listOfCoordinatesY.get(listOfCoordinatesY.size()-1); }
松开“取消”按钮时,我们返回到上一个坐标,并向该单元格返回原始(黑色)颜色:
if(boolButton && bool_mouseReleased){ if(x==storX && y==storY ) { modColor=0; } }
在
mouseReleased()函数中,
我们将马放置在字段的相应单元格中。
if(boolButton) { knightX=storX; knightY=storY; }
现在,使用处理语言的程序可以正常运行,而p5.js上程序中的撤消功能将无法正常运行。
在
此处检查p5.js上的程序
用int []数组替换主程序中的InList列表。 您可以使用
append()函数
将元素动态添加到数组以及列表中
listOfCoordinatesX = append(listOfCoordinatesX,0);
您无法从数组中使用pop()检索元素。 为此,有一个函数可以将数组的长度减少一个
short() 。 要确定数组的长度
,请使用
length而不是
size()该程序可以作为js脚本添加到html页面。 要运行脚本,您必须使用processing.js
在此查看此页面。
这里是一样的,只是带有马的形象。
在这里,马只能带着字母
G行走
。其余的动作均被禁止。
链接到github,并提供本文中提供的程序的文本。