No.1
- 回答日時:
ソースコード
および
> (フォルダ全部)
フォルダの構造
プリーズ!
ソースは、大きければどこかに載っけてURLを教えて。
回答ありがとうございます。
下記の記事にファイルをアップしました。よろしくお願いします。
フォルダの構成はこのjavaファイルとこのclassファイルと、「imegesyukusyo」フォルダがあり、このフォルダの中に、画像ファイル(1.jpg~12.jpg)が入っています。
http://rapuntuleru.cocolog-nifty.com/blog/
No.2
- 回答日時:
ソース拝見しましたよ。
基本的にあなたは、MediaTrackerというものを誤解してますね。あれは、画像(等)の事前ロードを確実に行うためのものであり、ランタイムにアニメクラスのタイミングで頻繁んに呼ぶものではありません。無茶ですよ(物理的な回線のないローカル機の上でしか、まともに動かないでしょう)。なお、最初からSwingつまりJAppletやJPanelを使えば、ダブルバッファリングがすでに実装されているので、プログラマの負担は軽いです。
このほか、あなたのコードには無駄な部分や、無意味に複雑な部分が多いです。簡単なアプリケーションだから、簡単に書きましょう。たとえば、このように:
(参考URLにアクセスしてみてください。)
------------------------------------------------------
/* save and compile as Nabe.java */
/*
<applet code="Nabe" width="640" height="480">
<param name="NumImage" value="12">
</applet>
*/
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.awt.image.*;
public class Nabe extends Applet implements MouseListener, Runnable{
Image currentImage, buf;
Image[] imgs;
int now, yousosu, w, h, sleeptime;
MediaTracker mt;
Thread thread;
float alpha = 1.0f;
Graphics2D bg;
AlphaComposite composite;
public void init(){
now = 0;
sleeptime = 120;
yousosu = Integer.parseInt(getParameter("NumImage"));
addMouseListener(this);
imgs = new Image[yousosu];
w = getSize().width;
h = getSize().height;
buf = createImage(w, h);
bg = ((Graphics2D)(buf.getGraphics()));
mt = new MediaTracker(this);
for (int i = 0; i < yousosu; ++i) {
imgs[i]
= getImage(getDocumentBase(),"imagesyukusyo/" + (i + 1) + ".jpg");
mt.addImage(imgs[i], 0);
}
try{
mt.waitForID(0);
}
catch (InterruptedException ie){
ie.printStackTrace();
}
composite = AlphaComposite.getInstance(AlphaComposite.SRC_OVER, alpha);
currentImage = imgs[now];
thread = new Thread(this);
thread.start();
}
public void update(Graphics g){
paint(g);
}
public void paint(Graphics g){
g.drawImage(buf, 0, 0, w, h, this);
}
public void mouseClicked(MouseEvent e) {
int btn = e.getButton();
if (btn == MouseEvent.BUTTON1){
++now;
if (now >= yousosu){
now = 0;
}
}
else if (btn == MouseEvent.BUTTON3){
--now;
if (now < 0){
now = (yousosu - 1);
}
}
currentImage = imgs[now];
thread = new Thread(this);
thread.start();
}
public void run(){
for (alpha = 0.2f; alpha < 1.1f; alpha += 0.1f){ //フェードイン効果
if (alpha > 1.0f){ //浮動小数点数の端数エラーを防ぐ苦肉の策
alpha = 1.0f;
}
composite = composite.derive(alpha);
bg.setComposite(composite);
bg.drawImage(currentImage, 0, 0, w, h, this);
repaint();
try {
thread.sleep(sleeptime);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void mouseEntered(MouseEvent e) {
}
public void mouseExited(MouseEvent e) {
}
public void mousePressed(MouseEvent e) {
}
public void mouseReleased(MouseEvent e) {
}
}
-----------------------------------------------
参考URL:http://rancoon.web.fc2.com/nabe.html
この回答への補足
質問者です。
_ranco_さんのコードを読んで勉強しようと思ったのですが、88行目の
composite = composite.derive(alpha);
のところで、エラーが出てしまいコンパイルできないのですが…。
もし、よければ、補足よろしくお願いします。
No.3ベストアンサー
- 回答日時:
> composite = composite.derive(alpha);
Java 1.6をダウンロード/インストールしてください。
それが不可能なら、getInstance()を使うしかないですね。
何度も回答ありがとうございます!getInstance()を使ったら、うまく動きました!
…のですが、今度は別の問題が出まして…。画像が完全に不透明に表示されないです…。例えば、一つ目の画像が表示されてクリックして、二つ目の画像に変化する時に、二つ目の画像が8,9割くらいは不透明に表示されたところで、スレッドが止まるみたいで、一つ目の画像がまだぼんやり見えてしまうんです…。
_ranco_さんが設置したアプレットは、綺麗に見えるので環境の問題ではないよなぁ…と思うんですが…。ただ自分でコードを読んでも、綺麗に完全に次の画像に変わるはず!としか判断できません…。
何か原因は、思い当たるでしょうか…?
何度もすみません。よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- HTML・CSS トリミングで表示した画像をクリックで元どおりにしたい 3 2022/12/16 18:49
- Windows 10 ウィンドウズ10のブートトラブル 2 2022/12/29 19:13
- プリンタ・スキャナー 印刷 キャンセル&印刷できない 2 2022/11/29 16:45
- ドメイン・サーバー・クラウドサービス 自作サイトをサーバーにアップロードしたのですが… 2 2022/11/08 18:12
- Windows 10 2つのウィンドウ選択時の表示について 10 2023/07/25 08:48
- Windows 8 Route Generator の使い方 1 2023/05/03 00:36
- HTML・CSS 分数が正常に表示されない。 6 2022/05/09 18:53
- JavaScript ブラウザの横幅に応じてとある画像(e.jpg)を画面いっぱいに表示できるようにしたいです。(写真の横 1 2022/10/06 21:17
- Excel(エクセル) excelvbaでスライドショーを作りたい 2 2023/04/20 14:32
- その他(IT・Webサービス) PCを立ち上げ時いつも同じ画像が出ます(トラブル発生、終了) 2 2022/04/23 12:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Junitテストでvoid戻り値メッソ...
-
Java ボールが動くアニメーション
-
C# タスク非表示でタイトルバー...
-
struts2のchainで値の受け渡し...
-
Processingでマウスクリックで...
-
デスクトップマスコットのドラ...
-
JWindow、JFrameでモーダル化の...
-
ペイントソフトを作っているの...
-
VBAで配列の計算
-
配列にnullを代入すると、null...
-
ループ処理の際、最後だけ","を...
-
配列をセッションに割り当てた後で
-
1~100までの数字を表示し、か...
-
Log4jで機能毎に別ファイルへ出...
-
シャットダウンフックが呼ばれない
-
EXCEL VBA で、0から?1から?
-
テキストボックスに入力された...
-
べき乗
-
グレイコードの変換
-
C# ListBoxのインデックスの値...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
大量のデータを読み込んで表示...
-
ボタンの複数割り当てについて
-
C#で、あるクラスのメンバーす...
-
Junitテストでvoid戻り値メッソ...
-
C#でのWNetAddConnection3の使...
-
C# 矢印キーの取得
-
Thread.sleepのInterruptedExce...
-
unityでのC++エラーの原因がわ...
-
C#で別のFormへ複数の値を返そ...
-
C# visibleプロパティをfalseに...
-
エンターキーを押すとOKボタン...
-
Processingでマウスクリックで...
-
[C#.net]スレッド化された別フ...
-
C#でキーイベントが発生しない...
-
C# DataGridView列カスタマイズ
-
【C#】ソースコードをファイル...
-
LVM_SETITEMSTATEでListViewの...
-
GetDIBits関数の使い方について
-
未割り当てのローカル変数
-
C# MouseHoverを何度も呼ぶには
おすすめ情報