文章分类 | 推荐文章 | 最新文章 | 热点文章 | 最新软件 | 精品软件 | 下载排行 | 推荐下载 | WPS | 杀毒软件
清风网络
首 页 软件下载 网络学院
QQ 电脑入门 游戏 操作系统 图形处理 办公软件 媒体动画 精文荟萃 工具软件 网络编程 程序开发 网络技术 认证考试 网站建设 文章专栏
当前位置:清风网络网络编程J2EE/J2MECanvas和Media实现钢琴效果
精品推荐
特别推荐
·J2EE Web开发技术期待一次新的技术变革
·J2ME程序开发初学者快速入门的九大要点
·使用技巧:J2ME中程序优化的十个小方法
·RMS从入门到精通之一
·J2EE应用程序中SQL语句的自动构造方法
·解决J2EE系统应用性能问题常用优化项目
·J2EE实用技巧:提升JSP应用程序的绝招
·J2ME内存优
·J2ME简介
·J2EE技术
热点TOP10
·使用Servlet发送电子邮件
·基于MIDP1.0实现通信录
·NetBeans的使用(1)
·配置Eclipse进行远程调试
·J2ME程序开发初学者快速入门的九大要点
·JBoss 文档(三) JBoss和JMS
·JBoss文档(二)??JBoss开发、打包、部署
·经典飞机游戏代码S60
·走进JBoss (1)
·调整压力测试工具

Canvas和Media实现钢琴效果

日期:2007年5月11日 作者: 查看:[大字体 中字体 小字体]

Canvas和Media实现钢琴效果本例使用Canvas绘制钢琴的界面,同时使用了MIDP 2.0的media子系统来播放钢琴按键触发的声音效果。是个不错的图形用户界面和音效结合的范例。

下载源码

 

 

 

 

/*
 * PianoMIDlet.java
 *
 * Created on 2005年12月6日, 下午2:02
 */

package com.j2medev.piano;

import javax.microedition.media.*;

import javax.microedition.lcdui.*;
import javax.microedition.midlet.*;

public class PianoMIDlet extends MIDlet {
    public void startApp() {
        Displayable d = new PianoCanvas();
        d.addCommand(new Command("Exit", Command.EXIT, 0));
        d.setCommandListener(new CommandListener() {
            public void commandAction(Command c, Displayable s) {
                notifyDestroyed();
            }
        });
        Display.getDisplay(this).setCurrent(d);
    }
    public void pauseApp() {}
   
    public void destroyApp(boolean unconditional) {}
}

class PianoCanvas extends Canvas {
    private static final int[] kNoteX = {
        0, 11, 16, 29, 32, 48, 59, 64, 76, 80, 93, 96
    };
    private static final int[] kNoteWidth = {
        16,  8, 16,  8, 16, 16,  8, 16,  8, 16,  8, 16
    };
    private static final int[] kNoteHeight = {
        96, 64, 96, 64, 96, 96, 64, 96, 64, 96, 64, 96
    };
    private static final boolean[] kBlack = {
        false, true, false, true, false,
                false, true, false, true, false, true, false
    };
    private int mMiddleCX, mMiddleCY;
    private int mCurrentNote;
    public PianoCanvas() {
        int w = getWidth();
        int h = getHeight();
        int fullWidth = kNoteWidth[0] * 8;
        mMiddleCX = (w - fullWidth) / 2;
        mMiddleCY = (h - kNoteHeight[0]) / 2;
        mCurrentNote = 60;
    }
    public void paint(Graphics g) {
        int w = getWidth();
        int h = getHeight();
        g.setColor(0xffffff);
        g.fillRect(0, 0, w, h);
        g.setColor(0x000000);
        for (int i = 60; i <= 72; i++)
            drawNote(g, i);
        drawSelection(g, mCurrentNote);
    }
    private void drawNote(Graphics g, int note) {
        int n = note % 12;
        int octaveOffset = ((note - n) / 12 - 5) * 7 * kNoteWidth[0];
        int x = mMiddleCX + octaveOffset + kNoteX[n];
        int y = mMiddleCY;
        int w = kNoteWidth[n];
        int h = kNoteHeight[n];
        if (isBlack(n))
            g.fillRect(x, y, w, h);
        else
            g.drawRect(x, y, w, h);
    }
    private void drawSelection(Graphics g, int note) {
        int n = note % 12;
        int octaveOffset = ((note - n) / 12 - 5) * 7 * kNoteWidth[0];
        int x = mMiddleCX + octaveOffset + kNoteX[n];
        int y = mMiddleCY;
        int w = kNoteWidth[n];
        int h = kNoteHeight[n];
        int sw = 6;
        int sx = x + (w - sw) / 2;
        int sy = y + h - 8;
        g.setColor(0xffffff);
        g.fillRect(sx, sy, sw, sw);
        g.setColor(0x000000);
        g.drawRect(sx, sy, sw, sw);
        g.drawLine(sx, sy, sx + sw, sy + sw);
        g.drawLine(sx, sy + sw, sx + sw, sy);
    }
    private boolean isBlack(int note) {
        return kBlack[note];
    }
    public void keyPressed(int keyCode) {
        int action = getGameAction(keyCode);
        switch (action) {
            case LEFT:
                mCurrentNote--;
                if (mCurrentNote < 60)
                    mCurrentNote = 60;
                repaint();
                break;
            case RIGHT:
                mCurrentNote++;
                if (mCurrentNote > 72)
                    mCurrentNote = 72;
                repaint();
                break;
            case FIRE:
                try {
                    Manager.playTone(mCurrentNote, 1000, 100);
                } catch (MediaException me) {
                }
                break;
            default:
                break;
        }
    }
}


[1] [2] 下一页 



上一篇:MIDlet应用程序模型基础

下一篇:使用Timer制作动画效果
相关文章:
·如何实现局域网打印机共享
·Photoshop打造气质美女旧照片效果
·新改的恐怖进门效果<胆小勿进>
·QQ空间音乐+皮肤(孙燕姿)+鼠标效果
·网络入侵也玩双通道 间接实现入侵系统
·实现多文件瞬间复制/移动
·3DMax:跟我学做房间效果图
·Flash 图片轮换效果
·开机提示reboot and select proper boot device or insert boot Media in selected boot device的解决
·变身卡效果资料(图文)
相关软件:

特别声明:本站除部分特别声明禁止转载的专稿外的其他文章可以自由转载,但请务必注明出处和原始作者。文章版权归文章原始作者所有。对于被本站转载文章的个人和网站,我们表示深深的谢意。如果本站转载的文章有版权问题请联系编辑人员,我们尽快予以更正。
[打印本页] [关闭窗口] 转载请注明来源:http://www.viphot.com
| 帮助(?) | 版权声明 | 友情连接 | 关于我们 | 信息发布
Copyright 2007 www.viphot.com All Rights Reserved. 鄂ICP备05000083号Powered by:viphot