นำเข้า net.java2000.tools.NoNull;
-
* ชิ้นส่วนโค้ดติดตามดวงตาที่ทำให้ดวงตาติดตามการเคลื่อนไหวของเมาส์ <br>
* คุณสามารถรันคนเดียวหรือใส่ไว้ใน html<br> ก็ได้
* <รหัสแอปเพล็ต = "ตา" codebase = "codebase"
* name="eyesApplet"><br>
* <ชื่อพารามิเตอร์ = "faceFile" value = "doofus.jpg"/><br>
* <ชื่อพารามิเตอร์ = "testMode" value = "false"/> <br>
* <ชื่อพารามิเตอร์ = "leftEyeX" value = "75"/> <br>
* <ชื่อพารามิเตอร์ = "leftEyeY" value = "77"/> <br>
* <ชื่อพารามิเตอร์ = "rightEyeX" value = "310"/> <br>
* <ชื่อพารามิเตอร์ = "rightEyeY" value = "75"/><br>
* <ชื่อพารามิเตอร์="irisRadius" value="20"/> <br>
* <ชื่อพารามิเตอร์ = "pupilRadius" value = "8"/><br>
* <ชื่อพารามิเตอร์ = "leftEyeRadius" value = "5"/><br>
* <ชื่อพารามิเตอร์="rightEyeRadius" value="5"/> <br>
* <ชื่อพารามิเตอร์ = "horizontalSkew" value = "3.5"/><br>
* <ชื่อพารามิเตอร์ = "eyeIndependence" value = "0.4"/> <br>
* <ชื่อพารามิเตอร์="irisRed" value="128"/><br>
* <ชื่อพารามิเตอร์ = "irisGreen" value = "64"/> <br>
* <ชื่อพารามิเตอร์ = "irisBlue" value = "0"/> <br>
* <ชื่อพารามิเตอร์ = "verticalOffset" value = "100"/> <br>
* </แอปเพล็ต>
-
* @ผู้เขียน Zhao Xueqing, Java Century Network (java2000.net)
-
-
Eye ระดับสาธารณะขยาย Applet {
serialVersionUID ยาวสุดท้ายแบบคงที่ส่วนตัว = 4124530672062457469L;
สตริงส่วนตัว mErrorMessage;
รูปภาพส่วนตัว mFace;
สีส่วนตัว mIrisColor, mPupilColor = Color.black;
mMouseX int ส่วนตัว, mMouseY;
ส่วนตัว int mLeftEyeX, mLeftEyeY, mRightEyeX, mRightEyeY;
ส่วนตัว int mLeftIrisX, mLeftIrisY, mRightIrisX, mRightIrisY;
int ส่วนตัว mLeftPupilX, mLeftPupilY, mRightPupilX, mRightPupilY;
mIrisRadius int ส่วนตัว, mPupilRadius;
int ส่วนตัว mLeftEyeRadius, mRightEyeRadius, mLeftPupilTR, mRightPupilTR;
ส่วนตัว int mVerticalOffset;
// ค่าเริ่มต้น
ส่วนตัว int mFaceX = 0, mFaceY = 0; // รูปภาพเริ่มต้นที่ 0, 0
ส่วนตัว int mIrisRed = 128, mIrisGreen = 64, mIrisBlue = 0;
ส่วนตัวสองเท่า mHorizontalSkew = 3.5, mEyeIndependence = 0.5, mGapFactor = 1.5;
mTestMode บูลีนส่วนตัว = false;
มิติส่วนตัว mDimension;
รูปภาพส่วนตัว mImage;
กราฟิก mGraphics ส่วนตัว;
โมฆะสาธารณะ init() {
mErrorMessage = null;
พยายาม {
// พารามิเตอร์บางตัวที่ต้องตั้งค่า
//รูปหน้าพื้นหลัง
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"));
// พารามิเตอร์ทางเลือก
ถ้า (getParameter("testMode") != null)
mTestMode = Boolean.valueOf(NoNull.toString(getParameter("testMode"), "true"))
.booleanValue();
ถ้า (getParameter("horizontalSkew") != null)
mHorizontalSkew = Double.valueOf(
NoNull.toString(getParameter("horizontalSkew"), "13.5")).doubleValue();
ถ้า (getParameter("eyeIndependence") != null)
mEyeIndependence = Double.valueOf(
NoNull.toString(getParameter("eyeIndependence"), "0.4")).doubleValue();
ถ้า (getParameter("irisRed") != null)
mIrisRed = Integer.parseInt(NoNull.toString(getParameter("irisRed"), "128"));
ถ้า (getParameter("irisGreen") != null)
mIrisGreen = Integer.parseInt(NoNull.toString(getParameter("irisGreen"), "64"));
ถ้า (getParameter("irisBlue") != null)
mIrisBlue = Integer.parseInt(NoNull.toString(getParameter("irisBlue"), "0"));
mIrisColor = สีใหม่ (mIrisRed, mIrisGreen, mIrisBlue);
ถ้า (getParameter("verticalOffset") != null)
mVerticalOffset = Integer.parseInt(NoNull.toString(getParameter("verticalOffset"),
"100"));
} จับ (ข้อยกเว้นจ) {
mErrorMessage = "พารามิเตอร์ที่จำเป็นไม่ถูกต้องหรือหายไป";
e.printStackTrace();
-
// คำนวณรัศมีการเคลื่อนที่ของลูกตา
mLeftPupilTR = mLeftEyeRadius + mIrisRadius - (int) (mGapFactor * mPupilRadius);
mRightPupilTR = mRightEyeRadius + mIrisRadius - (int) (mGapFactor * mPupilRadius);
//ฟังเหตุการณ์ของเมาส์
MouseMotion aMouseMotion = MouseMotion ใหม่ ();
this.addMouseMotionListener (aMouseMotion);
this.setSize(400, 135);
-
โมฆะสาธารณะ paintFrame (กราฟิก g) {
ถ้า (mErrorMessage != null) {
แสดงข้อผิดพลาด(g);
กลับ;
-
//ใบหน้าพื้นหลัง
g.drawImage(mFace, mFaceX, mFaceY, นี้);
// วาดทรงกลมด้านนอก
g.setColor(mIrisColor);
g.fillOval(mLeftIrisX - mIrisRadius, mLeftIrisY - mIrisRadius, 2 * mIrisRadius,
2 * มิริสเรเดียส);
g.fillOval(mRightIrisX - mIrisRadius, mRightIrisY - mIrisRadius, 2 * mIrisRadius,
2 * มิริสเรเดียส);
// วาดนักเรียน
g.setColor(mPupilColor);
g.fillOval(mLeftPupilX - mPupilRadius, mLeftPupilY - mPupilRadius, 2 * mPupilRadius,
2 * mPupilRadius);
g.fillOval(mRightPupilX - mPupilRadius, mRightPupilY - mPupilRadius, 2 * mPupilRadius,
2 * mPupilRadius);
ถ้า (mTestMode) {
g.drawOval(mLeftEyeX - mLeftEyeRadius, mLeftEyeY - mLeftEyeRadius, 2 * mLeftEyeRadius,
2 * mLeftEyeRadius);
g.drawOval(mRightEyeX - mRightEyeRadius, mRightEyeY - mRightEyeRadius,
2 * ม.RightEyeRadius, 2 * ม.RightEyeRadius);
-
-
โมฆะสาธารณะ mouseMoved() {
// พิกัดม่านตาซ้าย
int leftDX = mMouseX - mLeftEyeX;
int leftDY = mMouseY - mLeftEyeY;
ถ้า (ซ้ายDY == 0)
leftDY = 1; // ป้องกันการหารด้วยศูนย์
ซ้ายสองครั้งDXDY = (สองครั้ง) ซ้ายDX / ซ้ายDY;
ซ้ายสองครั้ง = Math.sqrt(Math.pow(mLeftEyeRadius, 2) / (Math.pow(leftDXDY, 2) + 1));
ถ้า (ซ้ายDY <0) {
ถนัดซ้าย = -ถนัดซ้าย;
-
double leftdx = leftDXDY * leftdy * mHorizontalSkew;
// พิกัดของม่านตาด้านขวา
int rightDX = mMouseX - mRightEyeX;
int rightDY = mMouseY - mRightEyeY;
ถ้า (ขวาDY == 0)
rightDY = 1; // ป้องกันการหารด้วยศูนย์
สองเท่า rightDXDY = (สองเท่า) rightDX / rightDY;
double rightdy = Math.sqrt(Math.pow(mRightEyeRadius, 2) / (Math.pow(rightDXDY, 2) + 1));
ถ้า (ขวาDY < 0) {
ถูกต้อง = -ถูกต้อง;
-
ดับเบิล rightdx = rightDXDY * rightdy * mHorizontalSkew;
// การปรับแต่งม่านตา
สองเท่า avex = (rightdx + leftdx) / 2;
สองครั้ง 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);
// ตำแหน่งม่านตาใหม่
mLeftIrisX = mLeftEyeX + (int) leftdx;
mLeftIrisY = mLeftEyeY + (int) ถนัดซ้าย;
mRightIrisX = mRightEyeX + (int) rightdx;
mRightIrisY = mRightEyeY + (int) ถูกต้อง;
//พิกัดลูกศิษย์ซ้าย
double leftpdy = Math.sqrt(Math.pow(mLeftPupilTR, 2) / (Math.pow(leftDXDY, 2) + 1));
ถ้า (ซ้ายDY <0) {
leftpdy = -leftpdy;
-
double leftpdx = leftDXDY * leftpdy * (mHorizontalSkew - mGapFactor);
//พิกัดสำหรับลูกศิษย์ที่ถูกต้อง
double rightpdy = Math.sqrt(Math.pow(mRightPupilTR, 2) / (Math.pow(rightDXDY, 2) + 1));
ถ้า (ขวาDY < 0) {
rightpdy = -rightpdy;
-
สองเท่า rightpdx = rightDXDY * rightpdy * (mHorizontalSkew - mGapFactor);
//การปรับเปลี่ยนสำหรับนักเรียน
avepdx สองเท่า = (rightpdx + leftpdx) / 2;
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);
//ตำแหน่งนักเรียนใหม่
mLeftPupilX = mLeftEyeX + (int) leftpdx;
mLeftPupilY = mLeftEyeY + (int) leftpdy;
mRightPupilX = mRightEyeX + (int) rightpdx;
mRightPupilY = mRightEyeY + (int) rightpdy;
ทาสีใหม่();
-
การอัปเดตโมฆะสาธารณะ (กราฟิก g) {
สี (ก.);
-
สีโมฆะสาธารณะ (กราฟิก g) {
มิติข้อมูล d = getSize();
// สร้างบริบทกราฟิกนอกหน้าจอ
ถ้า ((mGraphics == null) || (d.width != mDimension.width)
||. (d.height != mDimension.height)) {
ม.มิติ = d;
mImage = createImage(d.width, d.height);
mGraphics = mImage.getGraphics();
-
// ลบภาพก่อนหน้า
mGraphics.setColor(getBackground());
mGraphics.fillRect(0, 0, d.width, d.height);
mGraphics.setColor(สี.สีดำ);
// ระบายสีกรอบให้เป็นภาพ
เพ้นท์เฟรม (mGraphics);
// วาดภาพลงบนหน้าจอ
g.drawImage(mImage, 0, 0, null);
-
คลาส MouseMotion ขยาย java.awt.event.MouseMotionAdapter {
โมฆะสาธารณะ mouseMoved (เหตุการณ์ java.awt.event.MouseEvent) {
วัตถุ วัตถุ = event.getSource();
ถ้า (วัตถุ == Eye.this)
mouseMovedInApplet (เหตุการณ์);
-
-
โมฆะ mouseMovedInApplet (เหตุการณ์ java.awt.event.MouseEvent) {
// รับรหัสเมาส์
mMouseX = event.getX();
mMouseY = event.getY();
เมาส์ย้าย();
-
โมฆะสาธารณะ mouseMovedInBrowser (int x, int y, int windowWidth) {
int appletW = getSize().width;
// ปรับเมาส์ x และ y ให้สัมพันธ์กับตำแหน่งแอปเพล็ต
mMouseX = x - (ความกว้างของหน้าต่าง - แอปเพล็ตW) / 2;
mMouseY = y - mVerticalOffset;
เมาส์ย้าย();
-
โมฆะส่วนตัว showError (กราฟิก g) {
g.setFont(แบบอักษรใหม่("TimesRoman", Font.BOLD, 12));
g.drawString(mErrorMessage, 10, 20);
-
-