Используя библиотеку Openframeworks в C++, у меня есть радиус свечения (max_distance), который определяется протяжением мыши, перемещающейся по экрану (mouseDragX). Он работает нормально.Как добавить/вычесть значение, а не просто это значение
Но не каждый раз, когда я изменяю его размер (перетаскивая мышью), я хочу, чтобы он не начинался с 0 и сразу же перетаскивал мышью.
max_distance = mouseDragX/2;
Но скорее, если я уже перетащил мышь вправо, чтобы сказать 200 на предыдущей сопротивления, что в следующий раз, когда я перетащить мышью, и идти в противоположном направлении (отрицательные числа), что значение от max_distance уменьшается на , что сумма, а не просто быть этой суммой.
Я думал, что это будет
max_distance += mouseDragX/2;
но кажется, что убить его вообще
Можете ли вы мне помочь?
#include "testApp.h"
//--------------------------------------------------------------
void testApp::setup(){
ofSetWindowShape(700,700);
max_distance = 700; // ofDist didn't work(?) // ofDist(0,0,700,700);
ofEnableSmoothing();
ofEnableAlphaBlending();
}
//--------------------------------------------------------------
void testApp::update(){
max_distance = mouseDragX/2;
if (max_distance < 0) max_distance = 0;
}
//--------------------------------------------------------------
void testApp::draw(){
string str = "mouseDragX: ";
str += ofToString(mouseDragX)+" ";
ofSetWindowTitle(str);
int i,j;
int height = ofGetHeight();
int width = ofGetWidth();
for(i = 0; i <= height; i += 20) {
for(j = 0; j <= width; j += 20) {
float dist_color = getDistance(mouseX, mouseY, i, j); // for definition of getDistance, look below!
dist_color = dist_color/max_distance * 100;
// to get the colors into the range between 0 and 255, multiply the values by 5.
ofSetColor(dist_color*5,dist_color*5,dist_color*5, 123);
ofEllipse(i, j, 20, 20);
}
}
}
//--------------------------------------------------------------
void testApp::keyPressed (int key){
}
//--------------------------------------------------------------
void testApp::keyReleased (int key){
}
//--------------------------------------------------------------
void testApp::mouseMoved(int x, int y){
// shift values down
for (int i = 0; i < 1; /*<<- length of array*/ i++) {
pmouseX[i] = pmouseX[i+1];
pmouseY[i] = pmouseY[i+1];
}
// make pmouseX/Y[0] be the previous mouse position. [1] = current
pmouseX[1] = mouseX;
pmouseY[1] = mouseY;
}
//--------------------------------------------------------------
void testApp::mouseDragged(int x, int y, int button){
mouseDragX = (mouseX - pmouseX[0]);
}
//--------------------------------------------------------------
void testApp::mousePressed(int x, int y, int button){
// mouseDragX = mouseDragY = 0; // The drag starts here
}
//--------------------------------------------------------------
void testApp::mouseReleased(){
}
float testApp::getDistance(int startX, int startY, int endX, int endY){
return sqrt((endX-startX)*(endX-startX) + (endY-startY)*(endY-startY));
}
Большое вам спасибо.
, который сохраняет память, которая на один шаг ближе, но вводит всевозможные причудливые действия. Вероятно, это правильный путь, но я просто не может понять, почему он не работает должным образом, тем более, что код настолько прост. :( Теперь я официально сдаюсь. –