Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

オブジェクト指向を使ったJavaScriptで画像を動かすプログラミングの命名について

解決したいこと

JavaScriptで画像を動かすプログラミングをつくっています。
img idとObjectの変数の名前を個別にしたいです。
img idとObjectの変数の名前を個別するためにエラー(?)が発生しました。
解決方法を教えて下さい。

画像移動 誤の命令文(html)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>画像移動 誤</title>
<style>
#general {
position: absolute;
top: 32px;
left: 32px;
}
</style>
</head>
<body>
<script>
//画面に画像を表示する
document.write( '<img id="general" src="amira.png">' );

//アミラ様のオブジェクトを作成
let amira = new Object();
amira.x = 0;
amira.y = 0;

//なにかキーが押されたとき、keydownfuncという関数を呼び出す
addEventListener( "keydown", keydownfunc );

//キーが押されたときに呼び出される関数
function keydownfunc( event ) {

//押されたボタンに割り当てられた数値(すうち)を、key_codeに代入
	let key_code = event.keyCode;

	if( key_code === 37 ) amira.x -= 32; //「左ボタン」が押されたとき、amira.xの値から32を引く
	if( key_code === 38 ) amira.y -= 32; //「上ボタン」が押されたとき、amira.yの値から32を引く
	if( key_code === 39 ) amira.x += 32; //「右ボタン」が押されたとき、amira.xの値に32を足す
	if( key_code === 40 ) amira.y += 32; //「下ボタン」が押されたとき、amira.yの値に32を足す
    if( key_code === 90 ) alert( 'Iボタン(スーファミのAボタン)は未実装だよ!' );  //「zキー」が押されたら、警告する
    if( key_code === 88 ) alert( 'IIボタン(スーファミのBボタン)は未実装だよ!' );  //「xキー」が押されたら、警告する
    if( key_code === 65 ) alert( 'IIIボタン(スーファミのXボタン)は未実装だよ!' );  //「aキー」が押されたら、警告する
    if( key_code === 83 ) alert( 'IVボタン(スーファミのYボタン)は未実装だよ!' ); // 「sキー」が押されたら、警告する
    if( key_code === 32 ) alert( 'Startボタン(スーファミのスタートボタン)は未実装だよ!' );  // 「スペースキー」が押されたら、警告する
    if( key_code === 16 ) alert( 'Selectボタン(スーファミのセレクトボタン)ほ未実装だよ!' );  // 「シフトキー」が押されたら、警告する 

	//アミラ様の画像の位置(いち)を反映(はんえい)させる
	document.getElementById( 'general' ).style.top = amira.y + "px";
	document.getElementById( 'general' ).style.left = amira.x + "px";

}

</script>
</body>
</html>

画像移動 正の命令文(html)

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>画像移動 正</title>
<style>
#amira {
position: absolute;
top: 32px;
left: 32px;
}
</style>
</head>
<body>
<script>
//画面に画像を表示する
document.write( '<img id="amira" src="amira.png">' );

//アミラ様のオブジェクトを作成
let amira = new Object();
amira.x = 0;
amira.y = 0;

//なにかキーが押されたとき、keydownfuncという関数を呼び出す
addEventListener( "keydown", keydownfunc );

//キーが押されたときに呼び出される関数
function keydownfunc( event ) {

//押されたボタンに割り当てられた数値(すうち)を、key_codeに代入
	let key_code = event.keyCode;

	if( key_code === 37 ) amira.x -= 32; //「左ボタン」が押されたとき、amira.xの値から32を引く
	if( key_code === 38 ) amira.y -= 32; //「上ボタン」が押されたとき、amira.yの値から32を引く
	if( key_code === 39 ) amira.x += 32; //「右ボタン」が押されたとき、amira.xの値に32を足す
	if( key_code === 40 ) amira.y += 32; //「下ボタン」が押されたとき、amira.yの値に32を足す
    if( key_code === 90 ) alert( 'Iボタン(スーファミのAボタン)は未実装だよ!' );  //「zキー」が押されたら、警告する
    if( key_code === 88 ) alert( 'IIボタン(スーファミのBボタン)は未実装だよ!' );  //「xキー」が押されたら、警告する
    if( key_code === 65 ) alert( 'IIIボタン(スーファミのXボタン)は未実装だよ!' );  //「aキー」が押されたら、警告する
    if( key_code === 83 ) alert( 'IVボタン(スーファミのYボタン)は未実装だよ!' ); // 「sキー」が押されたら、警告する
    if( key_code === 32 ) alert( 'Startボタン(スーファミのスタートボタン)は未実装だよ!' );  // 「スペースキー」が押されたら、警告する
    if( key_code === 16 ) alert( 'Selectボタン(スーファミのセレクトボタン)ほ未実装だよ!' );  // 「シフトキー」が押されたら、警告する 

	//アミラ様の画像の位置(いち)を反映(はんえい)させる
	document.getElementById( 'amira' ).style.top = amira.y + "px";
	document.getElementById( 'amira' ).style.left = amira.x + "px";

}

</script>
</body>
</html>

自分で試したこと

・style内の#amiraを#generalに変更しました。
・script内のimg id、getElementByIdの文字列をamiraからgeneralに変更しました。

0

3Answer

既にご回答されている方がいらっしゃいますが...
コード拝見しました&実際に動かしてみました。

ご質問内容、改めて整理させてください。
下記でお間違いないでしょうか。

■ご質問者様が作られているもの
矢印キーを押すと、img要素が画面上を移動する機能

■ご質問
「誤の命令文」のコードでエラーが発生したので解決方法を知りたい

■状況
「正の命令文」から、img要素のid名ならびに、そのimg要素のDOM操作を記述している箇所のid名を修正した。(変更前:amira → 変更後:general)


自分が実際に動かして確認した感じだと、特にエラーもなくコード通りの動きをしているようです。ですので、どのようなエラーが出ているのか詳しくうかがえると幸いです!

・style内の#amiraを#generalに変更しました。
・script内のimg id、getElementByIdの文字列をamiraからgeneralに変更しました。

→ここの変更は問題なく、意図通りに反映されていると思いますよ!


※補足:オブジェクト指向について 他の質問者の方が触れられていたので簡単に補足しておきますね。 俗にいうオブジェクト指向はプログラミングの記述上の思想でして... オブジェクト変数とはまた別物になります。

「じゃぁオブジェクト指向ってなんやねん」となるかと思うのですが、現段階でその話を深入りすると、こんがらがると思いますので一旦忘れていただくとよいかも...
JavaScriptを勉強の中でクラスの書き方が出てきたタイミングで、「オブジェクト指向」を追っかけてみると理解しやすいかなと思います。

もしどうしてもオブジェクト指向が気になるようなら、ざっくり概念のイメージができるので下記動画オススメです。
https://youtu.be/FSnSZ_h7OQ0?si=yLEshqhUUU82mvu-

この辺言葉難しいですよね...!!めっちゃ分かります!

1Like

オブジェクト指向を使ったJavaScriptで画像を動かすプログラミングの命名について

質問者さんの言う「オブジェクト指向」というのはどういう意味ですか? let amira = new Object(); を使っているからそう言ってますか? そもそもそれが変ですし、そういうのはオブジェクト指向とは呼ばないと思いますが?

エラー(?)が発生しました。

エラーメッセージを書いてください。ブラウザのディベロッパーツールの Console タブを見ると詳しいことが分かるのでは?

画像移動 誤の命令文(html)
画像移動 正の命令文(html)

何が違うのですか?

0Like

Comments

  1. 質問者さん、無言ですが、回答者の質問に答えてもらわないと話が始まらないですよ。特に、

    質問者さんの言う「オブジェクト指向」というのはどういう意味ですか?

    というところ。質問者さんの言う「オブジェクト指向」に沿ってやりたいことを実現しないと回答しても意味が無さそうなので聞いてます。

javascriptに詳しくないので問題へのアドバイスではないのですが、
他の方からアドバイスしてもらうために、
やりたいことや問題と思われていることを、画面のスクリーンショットや、動画などでも追記してもらうと、アドバイスが集まりやすいかもしれません

htmlを見たところ、基本的に同じで、名称が違うだけのようでした。
恐らくこれは、同じような実行結果になるのではないかと思います。
2つのhtmlソースは、相互に画面遷移する、ということでも無さそうに見えます。

たぶん、今の質問を見た時に、どうなって欲しいとか、どう動かしたいのか、がわからないのではないでしょうか。

0Like

Your answer might help someone💌