ページ 1 / 1
Androidのサンプル
Posted: 2014年1月23日(木) 11:38
by あんどろいどくん
アプリを制作するためにサンプルプログラムを基に改良をしています。
しかし少々ソースコードが理解できなくて困っています。
現在はクリックするとボールが出現してボール同士が衝突するアプリになっています。今後はボール同士が衝突してボールの色が変わるというプログラムを作りたいのですがいくつか考えましたが色が変わりません。
こちらがサンプルのプログラムです。
これを基に上記で言いました衝突してボールの色を変えたいです。
//描画の方法&加速度センサーを使ってボールの色を変える
package jp.sakef;
import java.util.ArrayList;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.view.MotionEvent;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
public class MainView extends SurfaceView implements SurfaceHolder.Callback, Runnable
{
private static double e = 0.8;
private static double d = 0.99;
private float gx;
private float gy;
private Paint paint;
private SurfaceHolder holder;
private Thread thread;
private ArrayList<Circle> container;
private int width;
private int height;
public MainView(Context context)
{
super(context);
holder = null;
thread = null;
container = new ArrayList<Circle>();
paint = new Paint();
paint.setAntiAlias(true);
gx = gy = 0;
// getHolder()メソッドでSurfaceHolderを取得。さらにコールバックを登録
getHolder().addCallback(this);
}
//SurfaceView生成時に呼び出される
public void surfaceCreated(SurfaceHolder holder)
{
this.holder = holder;
thread = new Thread(this);
}
//SurfaceView変更時に呼び出される
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height)
{
if(thread != null )
{
this.width = width;
this.height = height;
thread.start();
}
}
//SurfaceView破棄時に呼び出される
public void surfaceDestroyed(SurfaceHolder holder)
{
thread = null;
}
//スレッドによるSurfaceView更新処理
public void run()
{
while (thread != null)
{
//描画処理
Canvas canvas = holder.lockCanvas();
canvas.drawColor(Color.argb(255, 0, 0, 0));
int size = container.size();
// 簡易衝突計算
for(int i=0 ; i<size ; i++)
{
for(int j=0 ; j<size ; j++)
{
if(j<=i) continue;
Circle a = container.get(i);
Circle b = container.get(j);
float ab_x = b.x - a.x;
float ab_y = b.y - a.y;
float tr = a.radius + b.radius;
if(ab_x*ab_x + ab_y*ab_y < tr*tr)
{
float len = (float)Math.sqrt(ab_x*ab_x + ab_y*ab_y);
float distance = (a.radius + b.radius) - len;
if(len>0) len = 1 / len;
ab_x *= len;
ab_y *= len;
distance /= 2.0;
a.x -= ab_x * distance;
a.y -= ab_y * distance;
b.x += ab_x * distance;
b.y += ab_y * distance;
canvas.drawColor(Color.argb(0, 255, 0, 255));
// 衝突後の速度を計算
float ma = (float) ((b.m / (a.m + b.m))*(1 + e)* ((b.dx - a.dx)*ab_x + (b.dy - a.dy)*ab_y));
float mb = (float) ((a.m / (a.m + b.m))*(1 + e)* ((a.dx - b.dx)*ab_x + (a.dy - b.dy)*ab_y));
a.dx += ma*ab_x;
a.dy += ma*ab_y;
b.dx += mb*ab_x;
b.dy += mb*ab_y;
}
}
}
// 計算をボールに反映
for(int i = 0 ; i < size ; i++)
{
Circle a = container.get(i);
a.dx *= d;
a.dy *= d;
a.dx += gx;
a.dy += gy;
a.x += a.dx;
a.y += a.dy;
if(a.x < a.radius)
{
a.x = a.radius;
a.dx *= -1;
}
if(a.y < a.radius)
{
a.y = a.radius;
a.dy *= -1;
}
if(a.x > width-a.radius)
{
a.x = width-a.radius;
a.dx *= -1;
}
if(a.y > height-a.radius)
{
a.y = height-a.radius;
a.dy *= -1;
}
paint.setColor(Color.argb(255, a.cr, a.cg, a.cb));
canvas.drawCircle(a.x, a.y, a.radius, paint);
}
holder.unlockCanvasAndPost(canvas);
}
}
// クリック時のイベント
public boolean onTouchEvent(MotionEvent event)
{
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
float x = event.getX();
float y = event.getY();
float dx = (float)(Math.random()*10-5);
float dy = (float)(Math.random()*10-5);
float ran = (float)Math.random();
float r = ran*20+5;
float m = ran*10+10;
int cr = 255;
int cb = (int)(255 * Math.random());
int cg = (int)(255 * Math.random());
container.add(new Circle(r, x, y, dx, dy, m, cr, cg, cb));
}
return true;
}
// 加速度の更新
public void setAcce(float gx, float gy)
{
this.gx = gx;
this.gy = gy;
}
}
Re: Androidのサンプル
Posted: 2014年1月23日(木) 21:38
by みけCAT
とりあえず、コードを提示するときは、BBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
Re: Androidのサンプル
Posted: 2014年1月23日(木) 23:17
by softya(ソフト屋)
こちらのコードが元ですね?
「Android(Java)を始める – SurfaceViewで描写 + 加速度センサー « Sakef Blog」
http://sakef.jp/blog/2011/02/android01_drawing/
ブログの方に失礼ですので、コードを借用している場合は元のサイトを書くようにしてください。あと雑誌や書籍のコードは掲載NGの場合があります。
何処を直されたんでしょうか?
Re: Androidのサンプル
Posted: 2014年1月23日(木) 23:29
by ISLe
元よりCircleクラスのcr,cg,cbメンバをRGB各要素として決定する色でボールが描画されていますから、ボールの色を変えたいならcr,cg,cbメンバを書き変えてください。
#Canvasをロックしている期間が無駄に長いのが気になります。
Re: Androidのサンプル
Posted: 2014年1月28日(火) 09:32
by あんどろいどくん
今後、ソースコードを載せるときは気をつけます。
ご指摘ありがとうございます。
簡易衝突のところで色を変更するのでしょうか?
例 [code=java][/code]int cr = 255;
int cb = (int)(255 * Math.random());
int cg = (int)(255 * Math.random());
container.add(new Circle(r, x, y, dx, dy, m, cr, cg, cb));
Re: Androidのサンプル
Posted: 2014年1月28日(火) 10:22
by softya(ソフト屋)
あんどろいどくん さんが書きました:今後、ソースコードを載せるときは気をつけます。
ご指摘ありがとうございます。
簡易衝突のところで色を変更するのでしょうか?
例
int cr = 255;
int cb = (int)(255 * Math.random());
int cg = (int)(255 * Math.random());
container.add(new Circle(r, x, y, dx, dy, m, cr, cg, cb));
掲示板などで質問されるときは試した上で問題点を質問されたほうが効率的です。
簡単に試すことが出来ると思うのですが。
【補足】
試行錯誤の過程で得られるものも多いのです。
Re: Androidのサンプル
Posted: 2014年1月29日(水) 16:55
by ISLe
あんどろいどくん さんが書きました:簡易衝突のところで色を変更するのでしょうか?
色を変更するところはそれで良いですが、例として提示されたコードは色を変更するコードになっていません。
「メンバを書きかえてください」をそのように解釈されたのでしょうか。
だとしたらソースコードを少々理解できないだけではないように思われますが。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 12:48
by あんどろいどくん
メンバを書き換えるということはr,g,bを数値に変えるのでしょうか。
プログラミング初心者なのですみません。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 12:54
by softya(ソフト屋)
>メンバを書き換えるということはr,g,bを数値に変えるのでしょうか。
メンバと言う言葉の意味は分かりますか?
ISLeさんの言われているのは、必要最低限のJavaの勉強をされていないのでは無いか?って事だと思います。
少なくともゲームを作るなら、Java言語を勉強して基礎的な練習問題ぐらいなら解けるぐらいは知識を深めて頂いたほうが変な所でつまずかないので良いと思います。
ゲームプログラミングの勉強とJava言語の勉強は別なので。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 13:12
by あんどろいどくん
オブジェクトの持つメンバ変数・関数ですよね。
Java言語は未経験に近いです。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 13:29
by softya(ソフト屋)
あんどろいどくん さんが書きました:オブジェクトの持つメンバ変数・関数ですよね。
Java言語は未経験に近いです。
他のプログラミング言語を理解しているのなら、代入の効果は違いは無いはずですが。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 13:46
by あんどろいどくん
初期化でcr,cg,cbの変数を作って
container.add(new Circle(r, x, y, dx, dy, m, cr, cg, cb));を書くのでしょうか
簡易衝突計算の2つ目のif文で衝突した場合色を変えるということをすると思うのですがどの辺りの処理をしたときに色を変えるということをするのでしょうか。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:00
by softya(ソフト屋)
変数の代入と値の保持を理解されているなら、ボールの色を決める変数に条件に応じて値を代入する事で色を変えることができる事は理解できるはずです。
プログラムの流れの基本的な理解とか、classとか、ArrayListとかをまったく理解されていないことが今までの質問から分かるので、言語の勉強も必要だって話になるわけです。
どのぐらい勉強されてのでしょうか?あるいは勉強される気がありますか?
こちらは短絡的な答えを教えたいのではなく、考え方や言語文法レベルの理解をしてもらいたくて回答しております。ご理解ください。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:10
by あんどろいどくん
C言語2年間・c++は1年半・Javaが数か月です。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:12
by softya(ソフト屋)
あんどろいどくん さんが書きました:C言語2年間・c++は1年半・Javaが数か月です。
それだけやっているなら、classとか、ArrayListとの事は理解できますよね。
class Circleがどんな役割を持っているかを書いてみてください。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:17
by あんどろいどくん
Circleは描画をするクラスで
描画する座標や形、色を生成する役割。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:23
by softya(ソフト屋)
Circleは、描画するメソッドは持ってないですね。
C++でコンストラクタのみ有る構造体と同じ様な使い方をしています。
だとしたら、Circleのインスタンスが保つ役割はどの様なもので、元のソースコードではどのように使われていますでしょか。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:29
by あんどろいどくん
形・座標・色のデータを集めたデータ
ここで初期化が行われている
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:36
by softya(ソフト屋)
あんどろいどくん さんが書きました:形・座標・色のデータを集めたデータ
ここで初期化が行われている
こちらにもお答え下さいね。
> だとしたら、Circleのインスタンスが保つ役割はどの様なもので、元のソースコードではどのように使われていますでしょか。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:37
by あんどろいどくん
上記に書いたのが答えなのですが。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:42
by softya(ソフト屋)
それだとMainViewでの使われ方に一切触れられておりませんので、わざとインスタンスと書かせていただきました。
あんどろいどくん さんの説明はclass Circleの説明だけだと思いますが。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:44
by あんどろいどくん
ボールに関する情報じゃないのでしょうか。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 14:48
by softya(ソフト屋)
あんどろいどくん さんが書きました:ボールに関する情報じゃないのでしょうか。
はい。そのCircleインスタンス具体的な使われ方を説明してもらえますか。
何行目で、こういう風にしているって所です。
必要ないなら私も細かく聞かない事なので大事なことなのです。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 15:00
by あんどろいどくん
MainViewの166行目~1699行目
int cr = 255;
int cb = (int)(255 * Math.random());
int cg = (int)(255 * Math.random());
container.add(new Circle(r, x, y, dx, dy, m, cr, cg, cb));
描画の為の要素として使われている。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 15:07
by softya(ソフト屋)
あんどろいどくん さんが書きました:MainViewの166行目~1699行目
int cr = 255;
int cb = (int)(255 * Math.random());
int cg = (int)(255 * Math.random());
container.add(new Circle(r, x, y, dx, dy, m, cr, cg, cb));
描画の為の要素として使われている。
それでは大雑把すぎるので他もお願いします。
onTouchEventの話だけですよね。
その他の部分はわからないでしょうか?
ジェネリクスを使ってアチコチで使われてます。ジェネリクスはC++で言うところのテンプレートクラスの使い方と同じです。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 15:16
by あんどろいどくん
80・81行目
Circle a = container.get(i);
Circle b = container.get(j);
container.get(j);
判定処理を受け取っている。
148行目
canvas.drawCircle(a.x, a.y, a.radius, paint);
ボールの描画が行われている。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 15:30
by softya(ソフト屋)
> 判定処理を受け取っている。
判定処理の結果を受け取るとは、どのような事をして何が受け取っているんでしょうか?
変化するのは何でしょうか? 具体的にお願いします。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 15:43
by あんどろいどくん
a・bに衝突の処理を代入している
ボールのサイズがiとjの処理をしてget(i)と(j)に渡したものを代入している。
Re: Androidのサンプル
Posted: 2014年1月30日(木) 15:49
by softya(ソフト屋)
> a・bに衝突の処理を代入している
処理は代入されていませんよね。
a・bに代入されているのは単なる参照です(ここがC++と書き方が違う所)。
> ボールのサイズがiとjの処理をしてget(i)と(j)に渡したものを代入している。
具体的に変化するメンバ変数をお書き下さい。そこが大事です。
そうすることでどういう永続的な変化が起きますか?
Re: Androidのサンプル
Posted: 2014年1月30日(木) 18:01
by ISLe
あんどろいどくん さんが書きました:148行目
canvas.drawCircle(a.x, a.y, a.radius, paint);
ボールの描画が行われている。
わたしの投稿から「ボールの色を変えたいならcr,cg,cbメンバを書き変えてください」という点だけを捉えたのでしょうか。
むしろ大事なのは「元よりCircleクラスのcr,cg,cbメンバをRGB各要素として決定する色でボールが描画されていますから」の部分なのですが。
147行目を見てもどこを書きかえたら良いのか分かりませんかね。
Re: Androidのサンプル
Posted: 2014年1月31日(金) 09:15
by あんどろいどくん
ちょっと分からなくなってきました。
どうやって説明すればいいのか言葉が出てこないです。
Re: Androidのサンプル
Posted: 2014年1月31日(金) 09:23
by softya(ソフト屋)
あんどろいどくん さんが書きました:ちょっと分からなくなってきました。
どうやって説明すればいいのか言葉が出てこないです。
まず、関連する部分を上げてみてください。
すくなくとも、どの行が関連しているかぐらいは提示できませんか?
Re: Androidのサンプル
Posted: 2014年1月31日(金) 09:30
by あんどろいどくん
MainViewの
25行~33行目
74行~84行目
113行~148行目
151行目~168行目
Re: Androidのサンプル
Posted: 2014年1月31日(金) 09:37
by softya(ソフト屋)
あんどろいどくん さんが書きました:MainViewの
25行~33行目
74行~84行目
113行~148行目
151行目~168行目
元のソースコードの行番号ですよね? 足らないのと、なにか違うところまで提示されている気が。
class Circleに関連する所だけでお願いできますか。 それと、元のブログのソースコードに掲載されている行番号を使って下さい。
Re: Androidのサンプル
Posted: 2014年1月31日(金) 11:41
by あんどろいどくん
MainViewの
64行~109行目
112行~147行目
150行~167行目
Re: Androidのサンプル
Posted: 2014年1月31日(金) 13:04
by dic
softyaさん 落ち着いてください。
世の中にはいろんな人がいます。
中学生でも書き込める時代ですから
(中学生とは言ってはいないけど、日本語があまりにもあれです)
Re: Androidのサンプル
Posted: 2014年1月31日(金) 16:44
by softya(ソフト屋)
dic さんが書きました:softyaさん 落ち着いてください。
世の中にはいろんな人がいます。
中学生でも書き込める時代ですから
(中学生とは言ってはいないけど、日本語があまりにもあれです)
dicさん。心配していただいて有難うございます。
私は怒っているわけではなく、冷静に分かって貰おうとしているだけです。
と言うことで あんどろいどくん さんも今しばらくお付き合いくださると嬉しいです。
あんどろいどくん さんが書きました:MainViewの
64行~109行目
112行~147行目
150行~167行目
では、これらの行の中で
(1)ボールの色に関する処理をしている部分
(2)ボールを発生させている部分。
(3)衝突した後でボールの軌道を変えている部分。
をそれぞれ出来るだけ狭い範囲の行で書き出してみてください。
【追記】
(2)はついでなので、省略可です。
他の人と相談した所、全体を理解してもらうのは次の機会として今回は色の変更だけに絞り込んだほうが良いとなりました。
と言うことで、全体の理解をしたい場合は別のトピックで質問をなさってください。
さて、class Circleの使われて所を絞り込んでもらったのですが、class Circleがボールに関する全情報を保持するためのクラスです。
当然、その中にはボールの色も含まれます。
説明の都合で、行番号を入れ替えています。
(1)150行~167行目。class Circleのインスタンスを生成しています。当然色に関しては処理が有りますがインスタンスの生成に関連した処理です。
(2)112行~147行目。移動と描画を担当しています。この中でclass Circleのインスタンスから色を取り出して描画に使っています。
(3)64行~109行目に関しては、色の扱いはありません。ボールの衝突に関する処理ですから。この中に衝突した瞬間が分かる部分がありますので、衝突時の処理としてclass Circleのインスタンスの保持する色を変更をすれば良いことになります。
では、
(1)の色は最終的のどの変数あるいはクラスのインスタンスが保持していることに成るでしょうか?
(2)で色を処理している行を書いてみてください。
(3)色の変更をどの部分に加えると良いと思いますか? 行番号でこの行の上と具体的に書いてみてください。
それとどのような処理をすると良いと思われますか? → ヒント:インスタンスに変更を加えます。
わからない部分は分かりませんでかまいません。特に(1)は分からなくても何となくの理解でも今回は何とかなります。
ただ、これ以外の改造を加えていく上では最終的には理解しなとダメな部分でも有ります。
その場合は質問タイトルとズレてくることに成るので、別トピックで質問をお願いします。
Re: Androidのサンプル
Posted: 2014年1月31日(金) 21:25
by ISLe
質問者さんはnew Circle(~)でセットされた色が自動的に描画に使われていると考えているように見えます。
ほんとうはコードから自力で読み取って欲しいのですが、ライブラリが絡むのでほとんど答えのようなヒントです。
paint.setColor(Color.argb(255, a.cr, a.cg, a.cb)); // 描画色をセット
canvas.drawCircle(a.x, a.y, a.radius, paint); // セットした描画色を使う
円(ボール)の描画は毎度ひとつずつ描画色をセットしながら行われています。
Re: Androidのサンプル
Posted: 2014年2月03日(月) 10:41
by あんどろいどくん
(1)の色は
最後にreturn trueで終わっていますので
(32行目)paint.setAntiAlias(true);に返されると思います。
(2)で色を処理している行
142と143行目で色の生成と描画が行われていると思います。
(3)色の変更をどの部分に加えると良いか
この行の上と具体的に書くというのは色の変更が行われる行の上
でしょうか。
Re: Androidのサンプル
Posted: 2014年2月03日(月) 12:40
by softya(ソフト屋)
あんどろいどくん さんが書きました:(1)の色は
最後にreturn trueで終わっていますので
(32行目)paint.setAntiAlias(true);に返されると思います。
これに関してはJavaやC++のクラスや更にはC言語での関数の理解度が足らないと思われますので、今回は詳しく説明しません。
それとAndroidのイベント駆動の動作自体も未理解だと思ってもらったほうが良いです。
別途勉強をして頂きたいと思いますが、分からないことがあれば別トピックということでお願いします。
これに付いてはここで終わりにしますが、大事なのはcontainerとだけ書いておきます。
あんどろいどくん さんが書きました:
(2)で色を処理している行
142と143行目で色の生成と描画が行われていると思います。
そうですね。それは何のどの変数を使って色を生成していますか?
あんどろいどくん さんが書きました:
(3)色の変更をどの部分に加えると良いか
この行の上と具体的に書くというのは色の変更が行われる行の上
でしょうか。
色の変更を行ったほうが良いと思われる行の範囲で構いません。
あるいは、この行の上に差し込むという書き方でもOKです。
どちらでもお好きな方で。
Re: Androidのサンプル
Posted: 2014年2月03日(月) 13:17
by あんどろいどくん
(1)
関数にとっつきにくいこともありまして関数が未だに分かりません。
(2)
a.cr,a.cg,a.cbで色が生成されている
a.x, a.y, a.radiusで描画が行われている
(3)
101行目の上に差し込まれると思います
86行~98行目が衝突判定だと思いますので、その後色が変わるという
処理を加えればと考えました。
Re: Androidのサンプル
Posted: 2014年2月03日(月) 14:07
by softya(ソフト屋)
(1)関数は基本なので、それが理解できないとプログラムが組めないと思ってもらって良いと思います。
関数のないプログラムは初歩の初歩ぐらいにしかありません。
(2)
>a.cr,a.cg,a.cbで色が生成されている
aは何処から生まれたかを理解すればもっと良いですね。
(3)のためにも考えてみてください。
(3)
>86行~98行目が衝突判定だと思いますので、その後色が変わるという
実はif文の理解も足りないと思います。
ただ、101行目でも構わないのでここに追加するとしましょう。
さて、どのようなソースコードを追加しますか?
Re: Androidのサンプル
Posted: 2014年2月03日(月) 14:40
by あんどろいどくん
(2)
Circleからa.を書くことが出来てると思います
それかcontainerが生成の原点なのかと思ってたりします
(3)
Circle a = container.get(i);
if(AとBが衝突したら)
{
色を変える
a.cr;
}
if(AとCが衝突したら)
{
色を変える
a.cg;
}
if(AとDが衝突したら)
{
色を変える
a.cb;
}
Re: Androidのサンプル
Posted: 2014年2月03日(月) 14:55
by softya(ソフト屋)
(2) 生まれてきたという書き方が語弊がありましたね。失礼しました。
何処から持ってきたのかですね。 containerの方が正解です。
(3) 衝突相手で色を変えるのは、あんどろいどくん さんには高度なので色を変えるだけに絞った方が良いと思います。
つまりif文は増やさないでください。
あと a.cb; やa.cr; だけでは色は変わりません。色を代入してください。
Re: Androidのサンプル
Posted: 2014年2月03日(月) 15:01
by あんどろいどくん
(3)
Circle a = container.get(i);
元の色からほかの色に変える
a.r = 元の色;
Re: Androidのサンプル
Posted: 2014年2月03日(月) 15:06
by softya(ソフト屋)
> Circle a = container.get(i);
既に有るので必要ありません。
>元の色からほかの色に変える
> a.r = 元の色;
rはメンバ変数として存在しません。
あと代入文を理解されていますか?
a.cr=元の色;
だとしてどんな効果を期待していますか。
それと「元の色」って部分も具体的な命令文でお願いします。
Re: Androidのサンプル
Posted: 2014年2月03日(月) 15:16
by あんどろいどくん
(3)
代入が逆でした
元の色?( canvas.drawCircle)=a.r
命令文で
if( canvas.drawCircle == a.r)
{
canvas.drawCircleの色を青にする?
}
Re: Androidのサンプル
Posted: 2014年2月03日(月) 15:55
by softya(ソフト屋)
> 元の色?( canvas.drawCircle)=a.r
すいません。意味不明です。
canvas.drawCircleはメンバ関数なので代入で書きません。
あとa.rはrと言うメンバ変数が先程も書いた通りありません。
それとif文は増やす必要がないと書いたのですが何故増やすのですか?理由を教えてください。
Re: Androidのサンプル
Posted: 2014年2月03日(月) 16:47
by あんどろいどくん
if文が複数あるのはダメだと捉えてしまって。
if文が命令文であったからです。
Re: Androidのサンプル
Posted: 2014年2月03日(月) 18:37
by softya(ソフト屋)
とりあえず最大のヒントです。
cr,cb,cgに値を代入すれば色は変わります。
if文は必要ないです。
※ crはcolor redの略です。以下cb,cgも同様。
それ以上の事をプログラムに加えたいなら、今一度基礎の基礎から勉強しなければならない状態だと思ってください。
Re: Androidのサンプル
Posted: 2014年2月04日(火) 09:17
by あんどろいどくん
101行目の上に
例:int cr = 0;
int cg = 0;
int cb = 255
と記述してもボールが衝突したときに青色に変わらないですよね
Re: Androidのサンプル
Posted: 2014年2月04日(火) 09:31
by softya(ソフト屋)
描画で使っているのはcontainer.get(i);で得たa.crなどですから、色を変更するのもcontainer.get(i);から得たa.crなどでなければいけません。
と言う理解で今はやってください。本当の話は難しすぎるので省略します。
Re: Androidのサンプル
Posted: 2014年2月04日(火) 10:13
by あんどろいどくん
a.cr=0;
a.cg=255;
a.cb=0;
を記述して色を変えることはできました。
もしも同色のボールと衝突したら消滅するという
処理を行うとしたら。
次のような記述をするのでしょうか
if(もしも同色と同じなら)
{
消滅する(destroye)
}
Re: Androidのサンプル
Posted: 2014年2月04日(火) 10:16
by softya(ソフト屋)
あんどろいどくん さんが書きました:a.cr=0;
a.cg=255;
a.cb=0;
を記述して色を変えることはできました。
もしも同色のボールと衝突したら消滅するという
処理を行うとしたら。
次のような記述をするのでしょうか
if(もしも同色と同じなら)
{
消滅する(destroye)
}
関数やクラスを理解できていない現状のあんどろいどくん さんには難しいと思います。
まず、ちゃんと言語の勉強をされるべきです。
Re: Androidのサンプル
Posted: 2014年2月04日(火) 10:37
by あんどろいどくん
どのように独学で学ぶのが効率いいでしょうか
Re: Androidのサンプル
Posted: 2014年2月04日(火) 10:48
by softya(ソフト屋)
あんどろいどくん さんが書きました:どのように独学で学ぶのが効率いいでしょうか
効率のよい方法なんてのは多分ないと思います。
ちゃんと1命令、1命令をコンパイル実行してデバッガやprintfなどで動作を確認しなら機能をイメージできるように理解するしかありません。
それを何ヶ月も続けて、やっと分かってくるというのがプログラミングです。
なお、既に本題から外れていますので、これを続けるなら別トピックでお願いします。
こちらは、解決チェックして投稿してください。
【補足】
効率のよい方法があるなら、学校などであんなに長い期間を掛けて言語の授業なんてしないと思いませんか。
あと、あの分厚く密度の濃い言語の入門書なんて必要ないですよね。
とにかく地道な積み重ねがじわじわと効いてくるのがプログラミングですので途中をすっ飛ばすと現状の あんどろいどくん さんの様に分けがわからなくなります。
Re: Androidのサンプル
Posted: 2014年2月06日(木) 15:00
by あんどろいどくん
どうもありがとうございます
新たにトピックを作り直そうと思います