一段眼睛跟着鼠标转动的跟踪眼代码

用尽一生烽火

用尽一生烽火

2016-02-19 11:40

今天图老师小编给大家精心推荐个一段眼睛跟着鼠标转动的跟踪眼代码教程,一起来看看过程究竟如何进行吧!喜欢还请点个赞哦~

代码如下:

import java.applet.Applet;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Image;

import net.java2000.tools.NoNull;

/**
* 一段眼睛跟着鼠标转动的跟踪眼代码。br
* 你可以单独运行,或者放在html里面br
* applet code="Eye" codebase="codebase" width="400" height="135"
* name="eyesApplet"br
* param name="faceFile" value="doofus.jpg"/br
* param name="testMode" value="false"/ br
* param name="leftEyeX" value="75"/ br
* param name="leftEyeY" value="77"/ br
* param name="rightEyeX" value="310"/ br
* param name="rightEyeY" value="75"/br
* param name="irisRadius" value="20"/ br
* param name="pupilRadius" value="8"/br
* param name="leftEyeRadius" value="5"/br
* param name="rightEyeRadius" value="5"/ br
* param name="horizontalSkew" value="3.5"/br
* param name="eyeIndependence" value="0.4"/ br
* param name="irisRed" value="128"/br
* param name="irisGreen" value="64"/ br
* param name="irisBlue" value="0"/ br
* param name="verticalOffset" value="100"/ br
* /applet
*
* @author 赵学庆,Java世纪网(java2000.net)
*
*/
public class Eye extends Applet {
private static final long serialVersionUID = 4124530672062457469L;
private String mErrorMessage;
private Image mFace;
private Color mIrisColor, mPupilColor = Color.black;
private int mMouseX, mMouseY;
private int mLeftEyeX, mLeftEyeY, mRightEyeX, mRightEyeY;
private int mLeftIrisX, mLeftIrisY, mRightIrisX, mRightIrisY;
private int mLeftPupilX, mLeftPupilY, mRightPupilX, mRightPupilY;
private int mIrisRadius, mPupilRadius;
private int mLeftEyeRadius, mRightEyeRadius, mLeftPupilTR, mRightPupilTR;
private int mVerticalOffset;

// 默认值
private int mFaceX = 0, mFaceY = 0; // image start at 0, 0
private int mIrisRed = 128, mIrisGreen = 64, mIrisBlue = 0;
private double mHorizontalSkew = 3.5, mEyeIndependence = 0.5, mGapFactor = 1.5;
private boolean mTestMode = false;

private Dimension mDimension;
private Image mImage;
private Graphics mGraphics;

public void init() {
mErrorMessage = null;

try {
// 设置的一些参数
// 背景的面部图片
mFace = getImage(getCodeBase(), NoNull.toString(getParameter("faceFile"), "doofus.jpg"));

// 左侧眼睛的x坐标
mLeftEyeX = mLeftIrisX = mLeftPupilX = Integer.parseInt(NoNull.toString(
getParameter("leftEyeX"), "75"));

// 左侧眼睛的y坐标
mLeftEyeY = mLeftIrisY = mLeftPupilY = Integer.parseInt(NoNull.toString(
getParameter("leftEyeY"), "77"));

// 右侧眼睛的x坐标
mRightEyeX = mRightIrisX = mRightPupilX = Integer.parseInt(NoNull.toString(
getParameter("rightEyeX"), "310"));

// 右侧眼睛的y坐标
mRightEyeY = mRightIrisY = mRightPupilY = Integer.parseInt(NoNull.toString(
getParameter("rightEyeY"), "75"));

// 眼睛的白眼球半径
mIrisRadius = Integer.parseInt(NoNull.toString(getParameter("irisRadius"), "20"));

// 眼睛的瞳孔半径
mPupilRadius = Integer.parseInt(NoNull.toString(getParameter("pupilRadius"), "8"));

// 左眼睛的移动半径
mLeftEyeRadius = Integer.parseInt(NoNull.toString(getParameter("leftEyeRadius"), "15"));

// 右眼睛的移动半径
mRightEyeRadius = Integer.parseInt(NoNull.toString(getParameter("rightEyeRadius"), "5"));

// 可选参数
if (getParameter("testMode") != null)
mTestMode = Boolean.valueOf(NoNull.toString(getParameter("testMode"), "true"))
.booleanValue();

if (getParameter("horizontalSkew") != null)
mHorizontalSkew = Double.valueOf(
NoNull.toString(getParameter("horizontalSkew"), "13.5")).doubleValue();
if (getParameter("eyeIndependence") != null)
mEyeIndependence = Double.valueOf(
NoNull.toString(getParameter("eyeIndependence"), "0.4")).doubleValue();
if (getParameter("irisRed") != null)
mIrisRed = Integer.parseInt(NoNull.toString(getParameter("irisRed"), "128"));
if (getParameter("irisGreen") != null)
mIrisGreen = Integer.parseInt(NoNull.toString(getParameter("irisGreen"), "64"));
if (getParameter("irisBlue") != null)
mIrisBlue = Integer.parseInt(NoNull.toString(getParameter("irisBlue"), "0"));
mIrisColor = new Color(mIrisRed, mIrisGreen, mIrisBlue);
if (getParameter("verticalOffset") != null)
mVerticalOffset = Integer.parseInt(NoNull.toString(getParameter("verticalOffset"),
"100"));
} catch (Exception e) {
mErrorMessage = "Bad or missing required parameter.";
e.printStackTrace();
}

// 计算眼球的移动半径
mLeftPupilTR = mLeftEyeRadius + mIrisRadius - (int) (mGapFactor * mPupilRadius);
mRightPupilTR = mRightEyeRadius + mIrisRadius - (int) (mGapFactor * mPupilRadius);

// 侦听鼠标事件
MouseMotion aMouseMotion = new MouseMotion();
this.addMouseMotionListener(aMouseMotion);
this.setSize(400, 135);
}

public void paintFrame(Graphics g) {
if (mErrorMessage != null) {
showError(g);
return;
}

// 背景面部
g.drawImage(mFace, mFaceX, mFaceY, this);

// 画外部的球体
g.setColor(mIrisColor);
g.fillOval(mLeftIrisX - mIrisRadius, mLeftIrisY - mIrisRadius, 2 * mIrisRadius,
2 * mIrisRadius);
g.fillOval(mRightIrisX - mIrisRadius, mRightIrisY - mIrisRadius, 2 * mIrisRadius,
2 * mIrisRadius);
// 画瞳孔
g.setColor(mPupilColor);
g.fillOval(mLeftPupilX - mPupilRadius, mLeftPupilY - mPupilRadius, 2 * mPupilRadius,
2 * mPupilRadius);
g.fillOval(mRightPupilX - mPupilRadius, mRightPupilY - mPupilRadius, 2 * mPupilRadius,
2 * mPupilRadius);

if (mTestMode) {
g.drawOval(mLeftEyeX - mLeftEyeRadius, mLeftEyeY - mLeftEyeRadius, 2 * mLeftEyeRadius,
2 * mLeftEyeRadius);
g.drawOval(mRightEyeX - mRightEyeRadius, mRightEyeY - mRightEyeRadius,
2 * mRightEyeRadius, 2 * mRightEyeRadius);
}
}

public void mouseMoved() {
// coordinates for the left iris
int leftDX = mMouseX - mLeftEyeX;
int leftDY = mMouseY - mLeftEyeY;
if (leftDY == 0)
leftDY = 1; // prevent divide by zero
double leftDXDY = (double) leftDX / leftDY;
double leftdy = Math.sqrt(Math.pow(mLeftEyeRadius, 2) / (Math.pow(leftDXDY, 2) + 1));
if (leftDY 0) {
leftdy = -leftdy;
}
double leftdx = leftDXDY * leftdy * mHorizontalSkew;

// coordinates for the right iris
int rightDX = mMouseX - mRightEyeX;
int rightDY = mMouseY - mRightEyeY;
if (rightDY == 0)
rightDY = 1; // prevent divide by zero
double rightDXDY = (double) rightDX / rightDY;
double rightdy = Math.sqrt(Math.pow(mRightEyeRadius, 2) / (Math.pow(rightDXDY, 2) + 1));
if (rightDY 0) {
rightdy = -rightdy;
}
double rightdx = rightDXDY * rightdy * mHorizontalSkew;

// adjustments for the irises
double avedx = (rightdx + leftdx) / 2;
double avedy = (rightdy + leftdy) / 2;
leftdx = leftdx + (avedx - leftdx) * (1 - mEyeIndependence);
rightdx = rightdx + (avedx - rightdx) * (1 - mEyeIndependence);
leftdy = leftdy + (avedy - leftdy) * (1 - mEyeIndependence);
rightdy = rightdy + (avedy - rightdy) * (1 - mEyeIndependence);
// new iris positions
mLeftIrisX = mLeftEyeX + (int) leftdx;
mLeftIrisY = mLeftEyeY + (int) leftdy;
mRightIrisX = mRightEyeX + (int) rightdx;
mRightIrisY = mRightEyeY + (int) rightdy;

// coordinates for the left pupil
double leftpdy = Math.sqrt(Math.pow(mLeftPupilTR, 2) / (Math.pow(leftDXDY, 2) + 1));
if (leftDY 0) {
leftpdy = -leftpdy;
}
double leftpdx = leftDXDY * leftpdy * (mHorizontalSkew - mGapFactor);

// coordinates for the right pupil
double rightpdy = Math.sqrt(Math.pow(mRightPupilTR, 2) / (Math.pow(rightDXDY, 2) + 1));
if (rightDY 0) {
rightpdy = -rightpdy;
}
double rightpdx = rightDXDY * rightpdy * (mHorizontalSkew - mGapFactor);

// adjustments for the pupils
double avepdx = (rightpdx + leftpdx) / 2;
double avepdy = (rightpdy + leftpdy) / 2;
leftpdx = leftpdx + (avepdx - leftpdx) * (1 - mEyeIndependence);
rightpdx = rightpdx + (avepdx - rightpdx) * (1 - mEyeIndependence);
leftpdy = leftpdy + (avepdy - leftpdy) * (1 - mEyeIndependence);
rightpdy = rightpdy + (avepdy - rightpdy) * (1 - mEyeIndependence);

// new pupil positions
mLeftPupilX = mLeftEyeX + (int) leftpdx;
mLeftPupilY = mLeftEyeY + (int) leftpdy;
mRightPupilX = mRightEyeX + (int) rightpdx;
mRightPupilY = mRightEyeY + (int) rightpdy;

repaint();
}

public void update(Graphics g) {
paint(g);
}

public void paint(Graphics g) {
Dimension d = getSize();

// create the offscreen graphics context
if ((mGraphics == null) || (d.width != mDimension.width)
|| (d.height != mDimension.height)) {
mDimension = d;
mImage = createImage(d.width, d.height);
mGraphics = mImage.getGraphics();
}

// erase the previous image
mGraphics.setColor(getBackground());
mGraphics.fillRect(0, 0, d.width, d.height);
mGraphics.setColor(Color.black);

// paint the frame into the image
paintFrame(mGraphics);

// paint the image onto the screen
g.drawImage(mImage, 0, 0, null);
}

class MouseMotion extends java.awt.event.MouseMotionAdapter {
public void mouseMoved(java.awt.event.MouseEvent event) {
Object object = event.getSource();
if (object == Eye.this)
mouseMovedInApplet(event);
}
}

void mouseMovedInApplet(java.awt.event.MouseEvent event) {
// get the mouse coords
mMouseX = event.getX();
mMouseY = event.getY();
mouseMoved();
}

public void mouseMovedInBrowser(int x, int y, int windowWidth) {
int appletW = getSize().width;

// adjust mouse x and y relative to applet position
mMouseX = x - (windowWidth - appletW) / 2;
mMouseY = y - mVerticalOffset;
mouseMoved();
}

private void showError(Graphics g) {
g.setFont(new Font("TimesRoman", Font.BOLD, 12));
g.drawString(mErrorMessage, 10, 20);
}
}

展开更多 50%)
分享

猜你喜欢

一段眼睛跟着鼠标转动的跟踪眼代码

编程语言 网络编程
一段眼睛跟着鼠标转动的跟踪眼代码

一段好玩的JavaScript代码

Web开发
一段好玩的JavaScript代码

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

一段返回随机记录的代码

ASP
一段返回随机记录的代码

一段php加密解密的代码

PHP
一段php加密解密的代码

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

javascript一段创建层的代码

Web开发
javascript一段创建层的代码

利用MSCHART画图的一段代码

ASP
利用MSCHART画图的一段代码

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

学java得这样学学习确实也得这样

学java得这样学学习确实也得这样

jsp遍历文件夹下的文件的代码

jsp遍历文件夹下的文件的代码
下拉加载更多内容 ↓