how can i use arraycopy correctly
in
Programming Questions
•
10 months ago
Hi
i try to make a sketch to create basic drawing with rect,with you could draw rect and select them modify the rect dimensions etc.
I Have some questions on it:
how could I modify only one value in the array, like only the 5th value to modify the color of only a rect?
how i could use array copy to redraw my rects on the array positions when i move only a rect?
why i get null pointer on the end with arraycopy?
------------------------------------------------------
//ARRAY OF RECT LOCATIONS
int[]pos, posY;
int[] npos, nposY;
int nombre, currentNombre =0;
//WIDTH AND HEIGHT RECT
int longueur;
//CONTROL BOOLEANS
boolean mouse;
boolean deplacer;
boolean noselect;
//TWO MODES CREATE FOR DRAW A RECT OR SELECT TO MOVE A RECT.
int m1, m2, wm;
boolean selectmode=false;
boolean create;
boolean createmode=false;
boolean releasecreate=false;
boolean moverect = false;
boolean debut;
void setup() {
//THE RECT MODE VARIABLES
m1=20;
m2=450;
wm=20;
size(800, 500);
nombre = 330;
pos = new int[nombre];
posY = new int[nombre];
longueur = 50;
mouse = true;
deplacer=false;
background(255);
debut=true;
}
void draw() {
if (debut) {
fill(0);
textSize(14);
text("PRESS ON A RECT AND SELECT A MODE THE 1ST RECT IS SELECT MODE TO MOVE RECT ", 50, 50);
text("THE SECOND IS CREATE MODE TO DRAW RECT", 150, 100);
}
if (mousePressed) {
println(pos[5]);
}
if (keyPressed) {
if (key=='A'||key=='a') {
background(0);
recreate();
}
}
for (int i=0;i<currentNombre;i++) {
//println(pos);
//SUPPRIMER DELETE A RECT IF YOU MOUSEPRESS AND KEYPRESS ON A RECT
if (mousePressed&&mouseX>pos[i]&&mouseY>posY[i]&&mouseX<pos[i]+longueur&&mouseY<posY[i]+longueur&&keyPressed) {
mouse=false;
background(255);
pos[i] = -100;
posY[i] = -100;
}
else {
fill(255);
}
// println(i);
if (pos[i] != -100 && posY[i] != -100) {
rect(pos[i], posY[i], 50, 50);
}
//THE RECT NUMBER
fill(125);
text(i, pos[i]+25, posY[i]+25);
//AGRANDIR
//if(mouseX>pos[i]-2&&mouseY>posY[i]-2&&mouseX<pos[i]+2&&mouseY<posY[i]+2){pushStyle();noFill();rect(pos[i]-2,posY[i]-2,4,4);popStyle();}
//
if (mousePressed&&mouseX>pos[i]&&mouseY>posY[i]&&mouseX<pos[i]+longueur&&mouseY<posY[i]+longueur&&!keyPressed&&selectmode) {
moverect=true;
}
}
//CREATE ON NE CREE PAS QUAND ON CLIQUE SUR UN MODE
//if(mouseX<m1&&mouseY<m2&&mouseX>m1+wm&&mouseY>m2+wm&&mouseX<m1+30&&mouseX>m1+30+wm){create=true;}else{create=false;}
if (mouseX>m1&&mouseY>m2&&mouseX<m1+wm&&mouseY<m2+wm) {
create=false;
}
if (mouseX>m1+30&&mouseY>m2&&mouseX<m1+wm+30&&mouseY<m2+wm) {
create=false;
}
//CREATE MODE
if (createmode) {
debut=false;
selectmode=false;
moverect=false;
fill(0);
rect(m1+30, m2, wm, wm);
if (!releasecreate) {
create=true;
}
}
else {
fill(255);
rect(m1+30, m2, wm, wm);
create=false;
}
//SELECT MODE
if (selectmode) {
debut=false;
createmode=false;
fill(0);
rect(m1, m2, wm, wm);
}
else {
fill(255);
rect(m1, m2, wm, wm);
}
// DRAW A RECT ON MOUSE PRESS
if (mousePressed&&mouse) {
if (create) {
pos[currentNombre]= mouseX;
posY[currentNombre]= mouseY;
currentNombre+=1;
}
mousePressed=false;
}
}
void mouseReleased() {
moverect=false;
//THE MODES SELECT/CREATE
if (mouseX>m1&&mouseY>m2&&mouseX<m1+wm&&mouseY<wm+m2) {
selectmode=!selectmode;
}
if (mouseX>m1+30&&mouseY>m2&&mouseX<m1+wm+30&&mouseY<wm+m2) {
createmode=!createmode;
}
if (mouseX>m1+30&&mouseY>m2&&mouseX<m1+wm+30&&mouseY<wm+m2&&createmode) {
releasecreate=true;
}
if (!keyPressed&&deplacer&&create) {
pos[currentNombre]=mouseX;
posY[currentNombre] = mouseY;
currentNombre+=1;
mouse=true;
deplacer=false;
}
// if(selectmode){ create=true;
//pos[currentNombre]=mouseX;
// posY[currentNombre] = mouseY;}
}
//THIS MODE DOESNT MATTER BECAUSE MOUSE DRAGGED IS THE SAME
void deplacer() {
if (deplacer) {
rect(mouseX, mouseX, 50, 50);
}
}
//TO COULD RECREATE A RECT AFTER DELETE
void keyReleased() {
mouse=true;
}
//AN OTHER CREATE CONTROL
void mouseMoved() {
if (!mousePressed) {
create=true;
}
}
void mouseDragged() {
for (int i=0;i<currentNombre;i++) {
if (moverect) {
//IF I DONT USE BACKGROUND ALL RECT ARE DRAWN ON MOUSE X
//IF I USE IT, THE OTHER RECT ARE DELETED UNDER BACKGROUND
background(255);
pos[i]=mouseX;
posY[i]=mouseY;
rect(pos[i], posY[i], 50, 50);
}
}
}
void recreate() {
//WHY I GET NULL POINTER EXCEPTION ON THIS PART?
for (int i=0;i<currentNombre;i++) {
arrayCopy(pos[i], npos[i]);
arrayCopy(posY[i], nposY[i]);
rect(npos[i], nposY[i], 50, 50);
}
}
1