import net.java2000.tools.NoNull;
/**
* قطعة من تتبع كود العين الذي يجعل العيون تتبع حركة الماوس. <ر>
* يمكنك تشغيله بمفرده أو وضعه في html<br>
* <البرنامج الصغير كود = "العين" كودبيس = "كودبيس"
* 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>
* </التطبيق الصغير>
*
*@author تشاو شيويه تشينغ، شبكة Java Century (java2000.net)
*
*/
الطبقة العامة العين تمتد التطبيق الصغير {
serialVersionUID النهائي الطويل الخاص = 4124530672062457469L؛
سلسلة خاصة mErrorMessage؛
صورة خاصة mFace؛
لون خاص mIrisColor, mPupilColor = Color.black;
كثافة العمليات الخاصة mMouseX، mMouseY؛
القطاع الخاص mLeftEyeX، mLeftEyeY، mRightEyeX، mRightEyeY؛
الخاص int mLeftIrisX، mLeftIrisY، mRightIrisX، mRightIrisY؛
الخاص int mLeftPupilX، mLeftPupilY، mRightPupilX، mRightPupilY؛
الخاص int mIrisRadius، mPupilRadius؛
الخاص int mLeftEyeRadius، mRightEyeRadius، mLeftPupilTR، mRightPupilTR؛
خاص int mVerticalOffset؛
// القيمة الافتراضية
Private int mFaceX = 0, mFaceY = 0; // تبدأ الصورة عند 0,0
كثافة العمليات الخاصة mIrisRed = 128، mIrisGreen = 64، mIrisBlue = 0؛
mHorizontalSkew المزدوج الخاص = 3.5، mEyeIndependence = 0.5، mGapFactor = 1.5؛
منطقي خاص mTestMode = false؛
البعد الخاص mDimension؛
صورة خاصة mImage؛
الرسومات الخاصة mGraphics؛
الحرف الفراغي العام () {
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")!= فارغة)
mTestMode = Boolean.valueOf(NoNull.toString(getParameter("testMode"), "true"))
.booleanValue();
إذا (getParameter("horizontalSkew")!= فارغة)
mHorizontalSkew = Double.valueOf(
NoNull.toString(getParameter("horizontalSkew"), "13.5")).doubleValue();
إذا (getParameter("eyeIndependence") != فارغة)
mEyeIndependence = Double.valueOf(
NoNull.toString(getParameter("eyeIndependence"), "0.4")).doubleValue();
إذا (getParameter("irisRed")!= فارغة)
mIrisRed = Integer.parseInt(NoNull.toString(getParameter("irisRed"), "128"));
إذا (getParameter("irisGreen")!= فارغة)
mIrisGreen = Integer.parseInt(NoNull.toString(getParameter("irisGreen"), "64"));
إذا (getParameter("irisBlue") != فارغة)
mIrisBlue = Integer.parseInt(NoNull.toString(getParameter("irisBlue"), "0"));
mIrisColor = new Color(mIrisRed, mIrisGreen, mIrisBlue);
إذا (getParameter("verticalOffset") != فارغة)
mVerticalOffset = Integer.parseInt(NoNull.toString(getParameter("verticalOffset"),
"100"))؛
} قبض (الاستثناء ه) {
mErrorMessage = "المعلمة المطلوبة غير صالحة أو مفقودة.";
printStackTrace();
}
// احسب نصف قطر حركة مقلة العين
mLeftPupilTR = mLeftEyeRadius + mIrisRadius - (int) (mGapFactor * mPupilRadius);
mRightPupilTR = mRightEyeRadius + mIrisRadius - (int) (mGapFactor * mPupilRadius);
// استمع إلى أحداث الماوس
MouseMotion aMouseMotion = new MouseMotion();
this.addMouseMotionListener(aMouseMotion);
this.setSize(400, 135);
}
إطار الطلاء العام الفارغ (الرسومات g) {
إذا (mErrorMessage != فارغة) {
showError(g);
يعود؛
}
// وجه الخلفية
g.drawImage(mFace, mFaceX, mFaceY, this);
// ارسم الكرة الخارجية
g.setColor(mIrisColor);
g.fillOval(mLeftIrisX - mIrisRadius، mLeftIrisY - mIrisRadius، 2 * mIrisRadius،
2 * ميريسراديوس)؛
g.fillOval(mRightIrisX - ميريسراديوس، mRightIrisY - ميريسراديوس، 2 * ميريسراديوس،
2 * ميريسراديوس)؛
// ارسم التلاميذ
g.setColor(mPupilColor);
g.fillOval(mLeftPupilX - mPupilRadius، mLeftPupilY - mPupilRadius، 2 * mPupilRadius،
2 * مبوبيلراديوس)؛
g.fillOval(mRightPupilX - mPupilRadius، mRightPupilY - mPupilRadius، 2 * mPupilRadius،
2 * مبوبيلراديوس)؛
إذا (م تيست مود) {
g.drawOval(mLeftEyeX - mLeftEyeRadius، mLeftEyeY - mLeftEyeRadius، 2 * mLeftEyeRadius،
2 * mLeftEyeRadius);
g.drawOval(mRightEyeX - mRightEyeRadius، mRightEyeY - mRightEyeRadius،
2 * mRightEyeRadius، 2 * mRightEyeRadius)؛
}
}
الماوس العام الفارغMoved () {
// إحداثيات القزحية اليسرى
int leftDX = mMouseX - mLeftEyeX;
int leftDY = mMouseY - mLeftEyeY;
إذا (يسارDY == 0)
leftDY = 1; // منع القسمة على صفر
double leftDXDY = (مزدوج) leftDX / leftDY؛
double leftdy = Math.sqrt(Math.pow(mLeftEyeRadius, 2) / (Math.pow(leftDXDY, 2) + 1));
إذا (يسارDY <0) {
leftdy = -leftdy;
}
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) {
rightdy = -rightdy;
}
double rightdx = rightDXDY * rightdy * mHorizontalSkew;
// تعديلات للقزحية
double avedx = (rightdx + leftdx) / 2;
مزدوج أفيدي = (يمين + يسار) / 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) leftdy;
mRightIrisX = mRightEyeX + (int) rightdx;
mRightIrisY = mRightEyeY + (int) rightdy;
// إحداثيات التلميذ الأيسر
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;
}
double 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;
إعادة رسم();
}
تحديث الفراغ العام (الرسومات ز) {
الطلاء (ز)؛
}
طلاء الفراغ العام (الرسومات ز) {
البعد د = getSize();
// إنشاء سياق الرسومات خارج الشاشة
إذا ((mGraphics == null) || (d.width != mDimension.width)
||.(d.height != mDimension.height)) {
mDimension = d;
mImage = createImage(d.width, d.height);
mGraphics = mImage.getGraphics();
}
// مسح الصورة السابقة
mGraphics.setColor(getBackground());
mGraphics.fillRect(0, 0, d.width, d.height);
mGraphics.setColor(Color.black);
// قم برسم الإطار في الصورة
PaintFrame(mGraphics);
// ارسم الصورة على الشاشة
g.drawImage(mImage, 0, 0, null);
}
فئة MouseMotion تمتد java.awt.event.MouseMotionAdapter {
public void mouseMoved(java.awt.event.MouseEvent events) {
كائن الكائن = Event.getSource();
إذا (كائن == Eye.this)
mouseMovedInApplet(event);
}
}
باطلة mouseMovedInApplet(java.awt.event.MouseEvent الحدث) {
// احصل على إحداثيات الماوس
mMouseX = events.getX();
mMouseY = events.getY();
mouseMoved();
}
الماوس العام الفارغMovedInBrowser(int x, int y, int windowWidth) {
int appletW = getSize().width;
// اضبط الماوس x وy بالنسبة لموضع التطبيق الصغير
mMouseX = x - (windowWidth - appletW) / 2;
mMouseY = y - mVerticalOffset;
mouseMoved();
}
خطأ عرض باطل خاص (الرسومات ز) {
g.setFont(new Font("TimesRoman", Font.BOLD, 12));
g.drawString(mErrorMessage, 10, 20);
}
}