gpt4 book ai didi

android - 用于处理的游戏 handle 控制 + 用于控制 Arduino 机器人的 Android

转载 作者:行者123 更新时间:2023-11-30 03:19:20 25 4
gpt4 key购买 nike

我想为 Processing 创建一个多点触控游戏 handle 控件,并用它来控制远程 Arduino 机器人。我想在 Processing 上制作 GUI 并为 Android 编译它。

这是我目前创建的用于处理的 GUI 游戏 handle :

    float easing = 0.09;
// start position
int posX = 50;
int posY = 200;
// target position
int targetX = 50;
int targetY = 200;

boolean dragging = false;

void setup()
{
size(500,250);
smooth();
}

void draw()
{
background(255);
if (!dragging)
{
// calculate the difference in position, apply easing and add to vx/vy
float vx = (targetX - (posX)) * easing;
float vy = (targetY - (posY)) * easing;


// Add the velocity to the current position: make it move!
posX += vx;
posY += vy;
}

if(mousePressed)
{
dragging = true;
posX = mouseX;
posY = mouseY;
}
else
{
dragging = false;
}

DrawGamepad();
DrawButtons();
}

void DrawGamepad()
{
//fill(0,155,155);
//rect(0, 150, 100, 100, 15);

ellipseMode(RADIUS); // Set ellipseMode to RADIUS

fill(0,155,155); // Set fill to blue
ellipse(50, 200, 50, 50); // Draw white ellipse using RADIUS mode

ellipseMode(CENTER); // Set ellipseMode to CENTER
fill(255); // Set fill to white//
ellipse(posX, posY, 35, 35); // Draw gray ellipse using CENTER mode
}

void DrawButtons()
{
fill(0,155,155); // Set fill to blue
ellipse(425, 225, 35, 35);
ellipse(475, 225, 35, 35);
fill(255,0,0); // Set fill to blue
ellipse(425, 175, 35, 35);
ellipse(475, 175, 35, 35);
}

我意识到该代码可能不支持 Android 上的多点触控事件,因此我想出了在此链接上找到的另一个代码

Can Processing handle multi-touch?

所以这个项目的目的是创建多点触控游戏 handle 来控制我的 Arduino 机器人。游戏 handle 应检测按下了哪个键以及操纵杆的方向。

感谢任何帮助。

最佳答案

我想说的第一件事是,您可能不需要实现任何多点触控兼容性。

我没有 android 来测试这个,但下面的代码应该可以工作:

import android.view.MotionEvent;

int TouchEvents;

/*
* xTouch and yTouch are arrays of the x and y coordinates of all fingers touching the screen, in arbitrary order.
* e.g. xTouch[2] and yTouch[2] are the coordinates of the third arbitrarily ordered finger touching the screen.
*/
float[] xTouch;
float[] yTouch;
int currentPointerId = 0;
boolean printFPS;

float easing = 0.09;
// start position
float posX = 50;
float posY = 200;
// target position
float targetX = 50;
float targetY = 200;

boolean dragging = false;

void setup()
{
size(500,250);
smooth();
//size(displayWidth, displayHeight);
orientation(LANDSCAPE);
background(0, 255, 0);
fill(0, 0, 244);
rect(100, 100, 100, 100);
stroke(255);

// Initialize Multitouch x y arrays
xTouch = new float [10];
yTouch = new float [10]; // Don't use more than ten fingers!
}

void draw()
{
background(255);
if (!dragging)
{
// calculate the difference in position, apply easing and add to vx/vy
float vx = (targetX - (posX)) * easing;
float vy = (targetY - (posY)) * easing;


// Add the velocity to the current position: make it move!
posX += vx;
posY += vy;

for (int i = 0; i < xTouch.length; i++)
{
ellipse(xTouch[i], yTouch[i], 150, 150);
}
}
DrawGamepad();
DrawButtons();

targetX = xTouch[currentPointerId];
targetY = yTouch[currentPointerId];
}

void DrawGamepad()
{
//fill(0,155,155);
//rect(0, 150, 100, 100, 15);

ellipseMode(RADIUS); // Set ellipseMode to RADIUS

fill(0,155,155); // Set fill to blue
ellipse(50, 200, 50, 50); // Draw white ellipse using RADIUS mode

ellipseMode(CENTER); // Set ellipseMode to CENTER
fill(255); // Set fill to white//
ellipse(posX, posY, 35, 35); // Draw gray ellipse using CENTER mode
}

void DrawButtons()
{
fill(0,155,155); // Set fill to blue
ellipse(425, 225, 35, 35);
ellipse(475, 225, 35, 35);
fill(255,0,0); // Set fill to blue
ellipse(425, 175, 35, 35);
ellipse(475, 175, 35, 35);
}

public boolean surfaceTouchEvent(MotionEvent event)
{
// Number of places on the screen being touched:
TouchEvents = event.getPointerCount();

// If no action is happening, listen for new events else
for(int i = 0; i < TouchEvents; i++)
{
int pointerId = event.getPointerId(i);
xTouch[pointerId] = event.getX(i);
yTouch[pointerId] = event.getY(i);
float siz = event.getSize(i);
}

// ACTION_DOWN
if(event.getActionMasked() == 0)
{
print("Initial action detected. (ACTION_DOWN)");
print("Action index: " +str(event.getActionIndex()));
}
// ACTION_UP
else if(event.getActionMasked() == 1)
{
print("ACTION_UP");
print("Action index: " +str(event.getActionIndex()));
}
// ACTION_POINTER_DOWN
else if(event.getActionMasked() == 5)
{
print("Secondary pointer detected: ACTION_POINTER_DOWN");
print("Action index: " +str(event.getActionIndex()));
}
// ACTION_POINTER_UP
else if(event.getActionMasked() == 6)
{
print("ACTION_POINTER_UP");
print("Action index: " +str(event.getActionIndex()));
}
//
else if(event.getActionMasked() == 4)
{

}

// If you want the variables for motionX/motionY, mouseX/mouseY etc.
// to work properly, you'll need to call super.surfaceTouchEvent().
return super.surfaceTouchEvent(event);
}

关于android - 用于处理的游戏 handle 控制 + 用于控制 Arduino 机器人的 Android,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19457629/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com