processingのカーソルと画像の距離

このQ&Aのポイント
  • processingでクリスマスカードを作るのですが、カーソルと雪だるまの距離があいてしまいます。この距離をあけないようにする方法を教えてください。
  • クリスマスカードをprocessingで作っていますが、カーソルと雪だるまの間に隙間ができてしまいます。この隙間をなくす方法が知りたいです。
  • processingでクリスマスカードを作っているのですが、カーソルと雪だるまの距離が開いてしまいます。どうすればこの距離を詰めることができるでしょうか?
回答を見る
  • ベストアンサー

processingのカーソルと画像の距離

processingでクリスマスカードを作るのですが、どうしてもカーソルと雪だるまの距離があいてしまいます。この距離をあけないようにするにはどうしたらいいでしょうか?わかる方がいらっしゃいましたらどうぞよろしくお願いします。 void setup() { size(600,600); smooth(); noStroke(); } int flag = 0; void draw() { background(10,50,100); fill(0); rect(0,450,600,280); int x=50,y=30; fill(#006e54); triangle(300,50,400,200,200,200); triangle(300,50+x,420,280,180,280); triangle(300,50+2*x,420+y,280+2*x,180-y,280+2*x); fill(190,103,31); rect(275,280+2*x,50,150); textSize(45); fill(255,0,0); text("Merry X'mas!",170,580); fill(random(255),random(255),random(255)); translate(249,5); beginShape(); vertex(50 , 50 - 20); vertex(50 - 12 , 50 + 15); vertex(50 + 18 , 50 - 8); vertex(50 - 18 , 50 - 8); vertex(50 + 12 , 50 + 15); endShape(CLOSE); fill(random(255),random(255),random(255)); ellipse(20,90,30,30); fill(random(255),random(255),random(255)); ellipse(100,130,30,30); fill(random(255),random(255),random(255)); ellipse(10,170,30,30); fill(random(255),random(255),random(255)); ellipse(55,220,30,30); fill(random(255),random(255),random(255)); ellipse(130,250,30,30); fill(random(255),random(255),random(255)); ellipse(90,350,30,30); fill(random(255),random(255),random(255)); ellipse(30,300,30,30); fill(random(255),random(255),random(255)); ellipse(10,360,30,30); fill(random(255),random(255),random(255)); ellipse(160,320,30,30); fill(random(255),random(255),random(255)); ellipse(-40,330,30,30); if(mousePressed) { flag=1; } else { flag=0; } if(flag==1) { snowman(); } else { textSize(20); fill(255); text("Please press mouse to create a snowman!",-150,20); } } void snowman() { int speed=2; int x=mouseX; int y=mouseY; x+=random(-speed,speed);//let snowman move randomly // x=constrain(x,0,500); y+=random(-speed,speed); y=constrain(y,0,600); fill(255); //make a little snowman ellipse(x,y-50,50,50); ellipse(x,y,100,100); fill(0); ellipse(x-10,y-55,10,10); ellipse(x+10,y-55,10,10); fill(#ff0000); triangle(x-10,y-50,x+10,y-50,x,y-30); }

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

processingは昔軽くやった程度なんであまり覚えてないですけど int x=mouseX-(補値正); int y=mouseY-(補値正); とするのはどうでしょう?

mono_l
質問者

お礼

無事解決しました。ありがとうございました!

関連するQ&A

  • プログラミングの課題、手伝ってください!!

    この俺が書いたプログラムを見てわかるとおり、今は1つのボールにしか、ファンクションがきいていない状況になってます。 これを3つのボール個々に大きさが代わったり、速さが変わったり、でてくるロケーションが変わったりするファンクションをきかせたいんです。 int width =600, height = 600; float d = random(5,40); float d1 = random(5,40); float d2 = random(5,40); float d3 = random(5,40); float x = random(0,width); float x1 = random(0,width); float x2 = random(0,width); float x3 = random(0,width); float y =0; float y1 =0; float y2 =0; float y3 =0; float speed1 = random(1,5); float speed2 = random(2,4); float speed3 = random(1,9); void setup() { size(width,height); background(255); smooth(); noStroke(); } void draw() { background(255); x1 = x1; y1 = y1; speed1 = speed1; d1 = d1; fill(255,0,0); ellipse(x,y,d,d); if(y<=height) { y= y + speed1; d= d1; } else { speed1 = random(1,5); d = random(5,40); y = 0; x = random(0,width); } x2 = x2; y2 = y2; speed2 = speed2; d2 = d2; fill(0,255,0); ellipse(x,y,d,d); if(y<=height) { y= y + speed2; d = d2; } else { speed2 = random(2,4); y = 0; d = random(5,40); x = random(0,width); } x3 = x3; y3 = y3; speed3 = speed3; d3 = d3; fill(0,0,255); ellipse(x,y,d,d); if(y<=height) { y= y + speed3; d= d3; } else { speed3 = random(1,9); y = 0; d = random(5,40); x = random(0,width); } } よろしくお願いします。

  • processingのプログラムの書き方について。

    課題で、どこからマウスをプレスしても20個もの四角を(0,0)まで数珠つなぎみたいにするプログラムをかいているんですが全然わかりません。 そのため大きさなどは瞬時に計算をするからmouse x, mouse yをつかいます だからrect(mouseX,mouseY,mouseX,mouseY)になると思うんですが。。 とにかく全部わかりません。教えてください。 自分が書いたのはこんなのですが、全然違います。 forループ、mouseX, mouseYを使うのはわかります int s = 600; int n = 20; int i = mouseX; void setup() { size(s,s); background(255); noStroke(); rectMode(CENTER); } void draw() { if(mousePressed) { for(int i=0; i<s; i++); { fill(255,0,0); rect(mouseX,mouseY,mouseX,mouseY); } } }

  • processingのマウス操作について

    現在processingを使って、画像のような図を作り、マウスでクリックしたところだけに色がついて、もう一度クリックすると色が消えるというプログラミングを作りたいと思っているのですが、なかなかうまくできません。 以下現在打ち込んでいるものです // Click within the image to change // the value of the rectangle after // after the mouse has been clicked int value = 255; int rect_size = 50; int num = 300 / rect_size; int x; void setup(){ size(300,300); } void draw(){ fill(value); for (int i = #ffffff;i < num;i++){ for (int j = 0;j < num;j++){ if (j%2 == 0){ x = i*rect_size*2; } else { x = i*rect_size*2+rect_size; } rect(x,j*rect_size,rect_size,rect_size); } } } void mouseClicked() { if (value == 255) { value = #aaaaaa; } else { value = 255; } } 使用言語はすべて英語です。 おそらく、drawのところでパターンとしてチェック模様を書いてしまっているのと、1マスだけに限定するという風な命令を書けていないからだと思うのですが、先生に訊いてもよくわかりません。 ご存じの方はご指導ご鞭撻のほどどうぞよろしくお願いします。

  • プログラミング初心者です

    processingプログラミング作成をしています。 mouseファンクション(mouseClickedとか)やkeyファンクション(keyPressed)などのファンクションをつかったときに、クリックやkeyをたたいたら次々変わっていくみたいなプログラムを作成したいんですが、教えてください。 いまは画面を4等分にし、mouseClickedををつかったらランダムに選ばれたスペースを赤く塗り、もう一回mouseをクリックしたら、その赤く塗られたのは消えて、次のまたランダムに選ばれたスペースへと移動する。。それを何回もやるというプログラミングにしたいです。 sizeは600,600でそれぞれのrectは rect(0,0,300,300) rect(300,0,600,300) rect(0,600,300,300) rect(600,600,300,300) で区切ってます。ずっと時間かけてやってますが、これをどうやってrandomファンクションにし、それをランダムに選ばれたスペースをマウスクリックしたら赤く塗られるようにするかがもっていくかがどうしてもわかりません。 あと、もう一回クリックしたら前にクリックした場所が消えるというのもわかりません。 これが今までに書いたプログラムです。 いまはif elseをつかっています。 よろしくお願いします。 void setup() { size(600,600); strokeWeight(2); background(255); line(0,width/2,600,width/2); line(height/2,0,height/2,600); } void draw() { fill(255,0,0); } void mouseClicked() { if( mouseX <= width/2) { fill(255,0,0); rect(0,0,width/2,height/2); } else { rect(width/2,0,300,300); fill(255,0,0); } if (mouseX > height/2) { rect(0,width/2,height/2,height); fill(255,0,0); } else { rect(width/2,height/2,width,height); fill(255,0,0); } }

  • Processing 円と線分の衝突判定について

    最近プログラミングを始めました。 今、画面の中央から落ちてくる円と、マウスボタンを押したときに三角の頂点から真上に表示される線分の2つが、接触したときに円の位置を画面の最上部に移動させ、その後再び下方向に円が移動する様なプログラムを作っています。 それで、それぞれ円と線分を表示させることはができたのですが、どうやれば円と線分が衝突したことになるか分かりません。 プログラムを載せます size(400,400); } void draw(){ background(0); fill(255,0,0); noStroke(); ellipse(200,y,r,r); y = y + 1; noStroke(); fill(10,10,255); triangle(mouseX,mouseY - 20,mouseX - 14,mouseY + 20,mouseX + 14,mouseY + 20); if(mousePressed){  stroke(248,252,3);  line(mouseX,0,mouseX,mouseY-20); } } あとはif命令を書き加えれば良いと思うのですが、どうしても条件式が思いつきません。 GW中ずっと悩んでいて分からなかったので質問しました。

  • ファイル出力

    下記のプログラムはランダムな黒い円を10個描くプログラムです。描かれた円の大きさ(wの値)を知りたいのでwの値を1つづつテキストファイルに出力するようにしたいのです。宜しくお願いします。 import ij.*; import ij.process.*; import ij.gui.*; import java.awt.*; import java.util.Random; import ij.plugin.*; public class Random_1 implements PlugIn { public void run(String arg) { IJ.run("New...", "name='Random 1' type='32-bit RGB' width=256 height=256"); drawOvals(); } void drawOvals() { ImagePlus imp = WindowManager.getCurrentImage(); Random ran = new Random(); int width = imp.getWidth(); int height = imp.getHeight(); for (int i=0; i<500; i++) { int w = (int)(ran.nextDouble()*width/16+1); int h = w; int x = (int)(ran.nextDouble()*width-w/2); int y = (int)(ran.nextDouble()*height-h/2); IJ.setForegroundColor((int)(0), (int)(0), (int)(0)); IJ.makeOval(x, y, w, h); IJ.run("Fill"); } } }

  • Processingでのキーの同時入力

    Processingでゲームを作ろうとしているのですがキーボードの同時入力がうまくいきません。 例えば下記のようなキー入力に応じて黒い四角が動くプログラムを実行しました。方向キーを一つだけ押したときはサクサク動いてくれるのですが、→と↓を同時に押しても斜めに進んでくれません。また、→と←を押した場合もどちらか片方の方に動いてしまいます。 このような問題を解決したいので、Processingでキーボードの同時入力を判定するにはどのようにすればいいのか教えてください。 float x, y; void setup(){ size(400, 400); noStroke(); smooth(); } void draw() { background(255,255,255); fill(0,0,0); rect(x,y,20, 20); if (keyPressed && key == CODED){ if (keyCode == LEFT){ x -= 2; } if (keyCode == RIGHT){ x += 2; } if (keyCode == UP){ y -= 2; } if (keyCode == DOWN){ y += 2; } } }

  • プログラミングProcessing ピンポンゲーム

    Processingでピンポンゲームを作っています。作成したプログラムは void setup(){ size(400,300); } float x=10; float y=10; float dx=1; float dy=2; int count=0; float r_w=50.0; float a_w=15.0; float a_h=15.0; boolean checkHit(float x,float y){ if(y+a_h<250)return false; if(x+a_w>=mouseX&&x<=mouseX+r_w){ return true; }else{ return false; } } void draw(){ x=x+dx;y=y+dy; if(x+a_w>=400){ dx=-1; }else if(x<0){ dx=1; } if(y+a_w>300){ x=0; y=0; dx=1; dy=2; count=0; }else if(y<0){ dy=2; } background(0,0,128); rect(x,y,a_w,a_w); rect(mouseX,250,r_w,3); text(count,10,300); if(checkHit(x,y)){ dy=-2; count=count+1; } } このプログラムだとどうしてもラケットの下にボールが潜り込んだ時に ボールが跳ね返されてしまうバグが発生してしまいます。 問題はboolean checkHitの部分にあると思うのですが、 どのように調節すればよいか分かりません。 わかる方教えてください<(__)>

  • プロセッシングが出来ません。

    プロセッシングをしていて、ずっと「java.lang.NullPointerException」が出ています。 ですが、どこで起きているのかわかりません。 わかる人いたら教えてください。 String sc_data[]; int sc[][] = new int[sc_data.length][4]; void setup() { int dow, i; frameRate(1); size(480,640); sc_data = loadStrings("schedule.txt"); System.out.println(sc_data.length); for(i = 0; i < sc_data.length; i++){ sc[i] =int( sc_data[i].split(",")); println(sc[i]); } } int idx,k; int mo,d,h,m,s; int c_w = 60; float b_c,he,y; void set_color(int idx){ switch(idx){ case 1: fill(77,166,255,100); break; case 2: fill(128,255,0,100); break; case 3: fill(245,112,112,100); break; case 4: fill(117,125,198); break; case 5: fill(151,247,242); break; case 6: fill(255,214,70); break; case 7: fill(147,38,255); break; case 8: fill(2,214,70); break; case 9: fill(253,198,230); break; } } void make_sc(float y, int s[][], float t,int o){ int l; fill(255,255,255,100); rect(0,70,c_w,height); y = s[o][0]*25 + s[o][1]*5/12; t = s[o][2]*5/12; println(t); l = s[o][3] + 3; set_color(l); rect(0, y, c_w,t); } void barclock(float b){ b = h*25+m*5/12; //println(b); noStroke(); if ((b >= 0)&&(b < 150)){ set_color(1); } else if ((b >= 150)&&(b < 225)){ set_color(2); } else if ((b >= 225)&&(b < 450)){ set_color(3); } else { set_color(4); } rect(0,0,width,b); fill(0); textSize(15); text(+mo+" / "+d+" "+h+":"+m+":"+s,5,49); } void draw() { mo= month(); d = day(); h = hour(); m = minute(); s = second(); background(255); strokeWeight(1); barclock(b_c); for(int i = 0; i < sc_data.length; i++){ make_sc(y, sc, he,i); } }

  • このプログラムのelse以降についての書き方

    以下のプログラムで、else以降についての書き方がわからず困っています。 このプログラムは、ランダムに与えられた点配置でx座標の小さい順からまず、三つ取り出し、三角形を作っていくのですが、最後のif文の点から点、辺から辺、辺から三角形など参照しているところで行き詰まっています。個々の配列の番号と=1とか2などの意味だけでも、分かる方いたら教えてください。よろしくお願いします。 --------------------------------------------------- #include <stdio.h> #include <stdlib.h> #define TRUE 1 #define FALSE 0 #define MAXV 100 #define MAXL 100 #define MAXT 100 #define OUTSIDE 0 int vs[MAXL]; /*始点のxyインデクス*/ int ve[MAXL]; /*終点のxyインデクス*/ int lscw[MAXL]; /*始点のclockwise line*/ int lecw[MAXL]; /*終点のclockwise line*/ int lscc[MAXL]; /*始点のcounter clockwise line*/ int lecc[MAXL]; /*終点のcounter clockwise line*/ int lt[MAXL]; /* left triangle */ int rt[MAXL]; /* right triangle */ int lfromv[MAXV]; /* any line from the vertex */ int lfromt[MAXT]; /* any line from the triangle */ double x[MAXV],y[MAXV]; int nxy; //頂点の数 int nvcurrent; /* 現時点での頂点数 */ int nline; /* number of lines */ int ntriangle /* number of triangles */ void makepoints(int *nxy,double *x,double *y); int tdet(int a1, int b1, int c1, int a2, int b2, int c2, int a3, int b3, int c3){ int retvalp, retvaln; retvalp = a1*b2*c3+a2*b3*c1+a3*b1*c2; retvaln = a1*b3*c2+a2*b1*c3+a3*b2*c1; return retvalp-retvaln; } int leftside(int vertex1, int vertex2, int vertex3)/*次の点が右側にあるか左側にあるか判定*/{ int a1, b1, c1, a2, b2, c2, a3, b3, c3; a1 = 1.0 ; b1 = x[vertex1]; c1 = y[vertex1]; a2 = 1.0 ; b2 = x[vertex2]; c2 = y[vertex2]; a3 = 1.0 ; b3 = x[vertex3]; c3 = y[vertex3]; if(tdet(a1, b1, c1, a2, b2, c2, a3, b3, c3)>0){ return TRUE; }else{ return FALSE; }; } void first_t(){ /* first 3 points are 1, 2 and 3 . */ if(leftside(1, 2, 3)==FALSE){ vs[1]= 1; ve[1]=2; vs[2]= 2; ve[2]=3; vs[3]= 3; ve[3]=1; lscc[1]=3 ; lscw[1]=3 ; lecc[1]=2 ; lecw[1]=2 ; lscc[2]=1 ; lscw[2]=1 ; lecc[2]=3 ; lecw[2]=3 ; lscc[3]=2 ; lscw[3]=2 ; lecc[3]=1 ; lecw[3]=1 ; lt[1]= OUTSIDE ; rt[1]= 1; lt[2]= OUTSIDE ; rt[2]= 1; lt[3]= OUTSIDE ; rt[3]= 1; lfromv[1]=1; lfromv[2]=2; lfromv[3]=3; lfromt[1]=1; nvcurrent =3; nline =3; ntriangle =1; }else/*leftside(1, 2, 3)==TRUE*/{ }; return; }

専門家に質問してみよう