忍者ブログ
  • 2024.10«
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • » 2024.12
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

【2024/11/22 18:35 】 |
NSUserDefaultsでゲームのハイスコアを保存
・NSUserDefaults

AndroidでいうSharedPreferencesのような感じ。
使い方はほとんどかわらないがキーが見つからなかった場合に返ってくる値を設定出来ない。
初期値の設定の際は一旦NSMutableDictionary型で値とキーを設定してNSUserDefalusに入れる

// NSUserDefaultsの取得
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];

// 初期値の設定
NSMutableDictionary *defaults = [NSMutableDictionary dictionary];
[defaults setObject:@"0" forKey:@"HIGHSCORE"];
[userDefaults registerDefaults:defaults];

// 情報の更新
[userDefaults setInteger:1000 forKey:@"HIGHSCORE"]; // int型でキー:HIGHSCOREに値を登録
[userDefaults setObject:@"1000" forKey:@"HIGHSCORE"] // NSString型で(以下同文)

[userDefaults synchronize]; // 明示的に反映させる(なくても反映される)

// 情報の取得
int i = [userDefaults integerForKey:@"HIGHSCORE"]; // HIGHSCOREの値をint型で取得する
NSString str [userDefaults StringForKey:@"HIGHSCORE]"; // HIGHSCOREの値をNSString型で取得する

// 情報の削除

[userDefaults removeObjectForKey:@"HIGHSCORE]; // HIGHSCOREをキーごと削除する

情報の更新の際にNSString型の値を入れるときはsetObjectなのに、取得するときはStringForKeyになるのが不思議。

あとはSharedPreferecesより手順が少なくてすこし楽
参考SharedPreferences
【Android】SharedPreferences
PR
【2013/03/24 13:11 】 | Objective-C | 有り難いご意見(0)
Objective-Cの本の紹介
こんにちは。今回はObjective-Cの本を紹介します。
満足度 ★★★☆☆

iPhoneアプリの開発の学校。

"Objective-Cの本"と書きましたが正確には"iPhoneアプリをプログラム未経験者でも簡単に作れてしまう本"です。

Objective-Cプログラミングに関しては、ほぼ触れてないです。
そのためコレ1冊ではほとんどその本質に触れられないので
これだけで開発者を目指せるかと言えばNOです。
「こんな感じなんだ〜」程度に使うなら◎

ただし
・Objective-Cのスタートには◎。ただし2380円
・プログラムに興味のある、興味をひかせたい10代にも◎

自分としては既に授業の始めの頃にやったことと重複するところも多かったのですが、しばらく触れていなかったのでリハビリには良かったです。
また、このアプリを改善するとしたらどんなことが出来るかな?と自分でアプリのカスタマイズが出来る余地がある程度の内容だったのでその点もよかったです。

サンプルプログラム数:4
サンプルプログラム用画像:あり
サンプルソースコード完成品:あり

備考:変数名がすこし違和感を感じる。誤植等は見当たらなかった。ソースコードの解説が超初心者向け。初心者で1日で終了。



【2013/03/21 11:42 】 | Objective-C | 有り難いご意見(0)
Androidの本の紹介
今回は勉強したAndroidの本を紹介したいと思います。

満足度 ★★★★★


AndEngineでつくるAndroid 2Dゲーム

正確にはAndEngineというフレームワークをつかってAndroid用2Dゲームを作るという本です。

最後までやってみた感想。
・プログラム完全初心者には難しいが、少しでもかじった人なら数回つまづく程度で簡単に出来る。
 私のような初心者でも、最後まで内容を理解しながらできました。

・本自体の間違いは少なめ。
 後半につれて間違いが出てきます。ですが割と分かりやすい間違い。注意は追加コード部分が通常は 色が変わっているのですが、変わっていなかったりすることがある。大抵編集途中らしき文字列がつ いていて気がつきやすい。

・途中に出てくるコラムが面白い。
 専門学校の授業で出てくる話しより、泥臭くて面白い。現実感を感じられます。*あくまでも学生視 点

サンプルプログラム数:3
サンプルプログラム用画像:あり
サンプルソースコード完成品:あり

*注意事項
時々編集の間違いがある。
他の本でAndroidからプログラムを勉強した初心者は戸惑う可能性あり。



自分はやっていて面白かったです。
【2013/03/19 21:59 】 | Android | 有り難いご意見(0)
プロジェクトをインポートして使う時の注意点。
Androidのプロジェクトをimportして使う際の注意点。

アプリを作成しているときにベースとなる部分を作っておいて、そこからアプリを作るということをしていてきがついたこと。

同じ雛形を使ったアプリを1つの端末に複数おくことが出来ない。

プロジェクトネームをリネームするだけじゃダメでした。
Javaファイルのパッケージネームを変更してもダメだめ。

どーしたもんかな?と思いましたがマニフェストファイルをみるとパッケージネームが変わっていなかったのでそこを変更したら解決しました。

JavaのパッケージネームとManifestFileのパッケージネームを変更する。
【2013/03/05 23:02 】 | Android | 有り難いご意見(0)
プリファレンス
プリファレンス
「キー”と”値”でデータを保存する」
DDMSでチェックできる。/data/data/パッケージ名/shared_prefsに格納されている。
ファイルの形式は.xml

プリファレンスの処理

プリファレンスオブジェクトの取得
SharedPreferences preference = getSharedPreference(ファイルネーム,処理モード);
第1引数
ファイルネーム…処理を行いたいファイル名を書く(ファイルがないときは作成するファイル名)←確認中
第2引数
処理モード(以下のいずれかの定数をいれる)
MODE_PRIVATE
他のアプリケーションからアクセス不可
MODE_WORLD_READABLE
他のアプリケーションからの読み込みは可能
MODE_WORLD_WRITABLE
他のアプリケーションからの書き込みは可能

データを編集する、編集用オブジェクトの取得
SharedPeferences.Editor editor = peference.edit();

データ書き込み
editor.putString(キー,値);

データの指定削除
editor.remove(キー);

プリファレンスファイルのデータを全て削除
editor.clear();

編集後、実行した内容をプリファレンスファイルに反映させる
editor.commit();

データの取得
String str = preference.getString(キー,"not found");
第1引数は取得したいデータのキー
第2引数はデータが取得できなかった場合に使用する値("みつかりません"とか)




サンプルプログラム
writeButton------>書き込み処理用のボタンのコールバックメソッド。
displayButton------>表示用ボタンのコールバックメソッド。
removeButton------>選択削除ボタンのコールバックメソッド。
deleteButton------->全件削除ボタンのコールバックメソッド。

プリファレンス以外の処理について
displayButton以外のボタンは押下されるとダイアログを表示。”はい”を選ぶとその後の処理に進む。
deleteButtonのみダイアログで”はい”を選んだ後最終確認としてもう一度ダイアログを表示させている。



public class MainActivity extends Activity {
private EditText imputId;
private EditText imputName;
private TextView displayView;

private String Id;
private String Name;
private String data;
private SharedPreferences preference;
private SharedPreferences.Editor editor;
private AlertDialog.Builder innerAb;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
displayView = (TextView)findViewById(R.id.displayview);
imputId = (EditText)findViewById(R.id.imputId);
imputName = (EditText)findViewById(R.id.imputName);
preference = getSharedPreferences("MEMBER_FILE", MODE_PRIVATE);
}
public void writeButton(View v){

AlertDialog.Builder ab = new AlertDialog.Builder(this);
ab.setTitle("登録処理");
ab.setMessage("プリファレンスに登録します");
ab.setPositiveButton("はい", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
Id = imputId.getText().toString();
Name = imputName.getText().toString();

editor = preference.edit();
editor.putString(Id, Name);
editor.commit();
Toast.makeText(getApplicationContext(), "登録しました", Toast.LENGTH_LONG).show();
}
});
ab.setNegativeButton("いいえ", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub

}
});
ab.show();
}
public void displayButton(View v){
data = preference.getString(imputId.getText().toString(), "登録されていません");
displayView.setText(data);

}
public void removeButton(View v) {
Id = imputId.getText().toString();
AlertDialog.Builder ab = new AlertDialog.Builder(MainActivity.this);
ab.setTitle("指定削除");
ab.setMessage("ID"+Id+"のデータを消去しますか?");
ab.setPositiveButton("はい",new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {

editor = preference.edit();
editor.remove(Id);
editor.commit();
}
});
ab.setNegativeButton("いいえ", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {


}
});
ab.show();

}
public void deleteButton(View v){

AlertDialog.Builder ab = new AlertDialog.Builder(MainActivity.this);
ab.setTitle("全件消去");
ab.setMessage("登録データを全件消去しますか?");
ab.setPositiveButton("はい", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
innerAb = new AlertDialog.Builder(MainActivity.this);
innerAb.setTitle("最終確認!");
innerAb.setMessage("本当に登録データを全件消去しますか?");
innerAb.setPositiveButton("はい", new DialogInterface.OnClickListener() {

@Override
public void onClick(DialogInterface dialog, int which) {
editor = preference.edit();
editor.clear();
editor.commit();
}
});
innerAb.setNegativeButton("いいえ", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
innerAb.show();
}
});
ab.setNegativeButton("いいえ",new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
ab.show();
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.activity_main, menu);
return true;
}

}
【2013/03/02 18:33 】 | Android | 有り難いご意見(0)
前ページ | ホーム | 次ページ

忍者ブログ [PR]