锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
鐪媞t涓嬭澆欏?/a>鐨凲t鐨剋indows鐗堟湰榛樿鎻愪緵32浣嶅拰64浣? 閭d釜鍟pengl鐗堟殏鏃舵湭鐞嗕細
鍥犱負鏈漢緋葷粺鏄痺in7 64bit, 鍥犳姣棤鐞嗙敱鐨勪笅杞戒簡64浣嶇殑qt5.2鐗堟湰. 緙栬瘧浜唄ello world, 緇撴灉鎶ラ敊:
module machine type 'x64' conflicts with target machine type 'X86'
鎵句簡鍗婂ぉ娌℃煡鍒伴敊璇? 鍚庨潰娉ㄦ剰鍒皏s2012鐨勫伐紼嬬紪璇戠被鍨嬮夋嫨鐨勬槸win32 x86, 鎵嶆兂璧鋒槸鐢變簬qt5鐨勬墍鏈塴ib鏄?4浣嶇紪璇? 鑰屾垜浣跨敤32浣嶇殑紼嬪簭鍘婚摼鎺? 褰撶劧瑕佹姤閿?
閲嶆柊涓嬭澆32浣嶇殑qt5.2, 緙栬瘧姝g‘
鍙﹀涓涓敊璇篃鏄湪鍓嶉潰鐗堟湰鏋佷負灝戣鐨?
fatal error C1083: Cannot open include file: 鈥橤LES2/gl2.h鈥? No such file or directory
寰堝浜虹殑瑙e喅鏂規硶鏄寘鍚玅tANGLE涓嬬殑gles2鐩綍, 浣嗘槸鐢變簬鎴戠殑宸ョ▼鍐呯殑cocos2dx鏈韓涔熷甫鏈夎繖涓滆タ. 浜庢槸鐮旂┒浜嗕笅涓哄暐榪欑増鏈殑qt榛樿瑕佹悶鐨勯潪瑕佸拰gles鏈夊叧緋?
鏈緇? 鍙戠幇鍙互閫氳繃瀹氫箟QT_NO_OPENGL瀹忔潵灞忚斀opengl鐨勬覆鏌揂PI浣跨敤, 緙栬瘧閫氳繃
寰堟槸鎬蹇佃鍩轟簹鏃朵唬鐨剄t, 涓嬭澆,緙栬瘧涓姘斿懙鎴?/p>
鍦ㄥ惎鍔ㄥ墠, 娣誨姞濡備笅浠g爜:
QApplication qapp(argc, argv);
qapp.addLibraryPath(QCoreApplication::applicationDirPath()+"/plugins");
灝哘T寮鍙戠洰褰曚笅: Qt\4.8.2\plugins\鎷瘋礉鍒癚t鐨別xe鐩綍鍗沖彲
鍦╓indows鐜鍙橀噺涓病鏈夋壘鍒?(QTDIR)
闅忓嵆鍦≦t鐨刅isual Studio 鎻掍歡鑿滃崟涓? Qt->Qt Options-> Qt Versions
璁劇疆Default Qt/Win version涓烘柊鐗堟湰
閫変腑鍘熸湁鐨凲t宸ョ▼, 鍦ㄦ彃浠惰彍鍗曚腑鎵懼埌Qt Project Settings->Properties->Version涓?灝嗙増鏈緗負鏈鏂扮増鏈?/p>
濡傛灉瑁呮湁Visual AssitX, 姝ゆ椂榪欎笢瑗垮簲璇ュ紑濮婸arse鏂扮殑Qt搴撲簡
have fun !
qteditorfactory.h 涓?/p>
QtLineEditFactory綾繪坊鍔犲涓嬩唬鐮?綰㈣壊鏍囪瘑
class QT_QTPROPERTYBROWSER_EXPORT QtLineEditFactory : public QtAbstractEditorFactory<QtStringPropertyManager> { Q_OBJECT public: QtLineEditFactory(QObject *parent = 0); ~QtLineEditFactory(); protected: void connectPropertyManager(QtStringPropertyManager *manager); QWidget *createEditor(QtStringPropertyManager *manager, QtProperty *property, QWidget *parent); void disconnectPropertyManager(QtStringPropertyManager *manager); private: QtLineEditFactoryPrivate *d_ptr; Q_DECLARE_PRIVATE(QtLineEditFactory) Q_DISABLE_COPY(QtLineEditFactory) Q_PRIVATE_SLOT(d_func(), void slotPropertyChanged(QtProperty *, const QString &)) Q_PRIVATE_SLOT(d_func(), void slotRegExpChanged(QtProperty *, const QRegExp &)) Q_PRIVATE_SLOT(d_func(), void slotSetValue(const QString &)) Q_PRIVATE_SLOT(d_func(), void slotEditingFinished()) Q_PRIVATE_SLOT(d_func(), void slotEditorDestroyed(QObject *)) };
qteditorfactory.cpp涓?/pre>class QtLineEditFactoryPrivate : public EditorFactoryPrivate<QLineEdit> { QtLineEditFactory *q_ptr; Q_DECLARE_PUBLIC(QtLineEditFactory) public: void slotPropertyChanged(QtProperty *property, const QString &value); void slotRegExpChanged(QtProperty *property, const QRegExp ®Exp); void slotSetValue(const QString &value); void slotEditingFinished(); };void QtLineEditFactoryPrivate::slotEditingFinished() { QObject *object = q_ptr->sender(); const QMap<QLineEdit *, QtProperty *>::ConstIterator ecend = m_editorToProperty.constEnd(); for (QMap<QLineEdit *, QtProperty *>::ConstIterator itEditor = m_editorToProperty.constBegin(); itEditor != ecend; ++itEditor) if (itEditor.key() == object) { QtProperty *property = itEditor.value(); QtStringPropertyManager *manager = q_ptr->propertyManager(property); if (!manager) return; QString value = static_cast<QLineEdit*>(itEditor.key())->text(); manager->setValue(property, value); return; } }QWidget *QtLineEditFactory::createEditor(QtStringPropertyManager *manager, QtProperty *property, QWidget *parent) { QLineEdit *editor = d_ptr->createEditor(property, parent); QRegExp regExp = manager->regExp(property); if (regExp.isValid()) { QValidator *validator = new QRegExpValidator(regExp, editor); editor->setValidator(validator); } editor->setText(manager->value(property)); connect(editor, SIGNAL(editingFinished()), this, SLOT(slotEditingFinished())); connect(editor, SIGNAL(destroyed(QObject *)), this, SLOT(slotEditorDestroyed(QObject *))); return editor; }榪欐牱鏃㈠彲鍦ㄨ緭鍏ュ洖杞﹂敭,鎴栬呰緭鍏ユ澶卞幓鐒︾偣鍚庝駭鐢熶竴涓狾nValueChange浜嬩歡
]]>
鎻愮ず涔熷啓鐫鍦ㄨ繖閲屽彲浠ヤ笅杞藉埌浠ュ墠鐨勪竴浜決t鍖?/p>
鍦ㄩ噷闈㈢粓浜庡彲浠ユ壘鍒?a href="ftp://ftp.qt.nokia.com/qt/solutions/lgpl/qtpropertybrowser-2.5_1-opensource.zip">qtpropertybrowser-2.5_1-opensource.zip
涓嬭澆鍚庯紝鐢╒isualStudio鐨凲t鎻掍歡鎵撳紑pro錛屾湁渚嬪瓙鏈夎緗ソ鐨勫伐紼嬶紝榪樻剚鏂囨。涔堬紝鍛靛懙
1. MFC
浼樼偣錛歏S2008浠ュ強VS2010鐨勬墿灞曠‘瀹炲緢寮哄ぇ錛岀壒鍒槸鍘熺敓鐨勭獥鍙h繍琛屾椂鍋滈潬浠ュ強PropertyGrid紜疄寰堝己澶?/p>
緙虹偣錛氶粯璁ゅ瓧浣撳緢妯$硦錛屾棤璁轟綘瀵筂FC澶氫簡瑙o紝C++澶氱啛鎮夛紝姣忔鍐欎唬鐮佹椂渚濈劧瑕侀噸鏂扮啛鎮変唬鐮侊紝鏇翠笉鐢ㄦ彁鍒嗘瀽鍒漢鍐欑殑MFC浠g爜錛屼竴涓瓧錛氫貢銆?/p>
2. WTL
浼樼偣錛歐indows涓嬫湁涓渶濂界殑渚嬪瓙錛欸oogle Chrome
緙虹偣錛氱己涔忚璁″櫒錛屾枃妗d緥瀛愬緢灝?/p>
3. wxWidgets
浼樼偣錛氳櫄騫?緙栬緫鍣ㄥ湪鐢紙涓嶆槸騫垮憡錛夛紝wxAUI鐨勫竷灞璁捐鍣ㄥ緢鏂逛究錛學indows鍘熺敓鐣岄潰寰堣垝鏈嶏紝鍚勭鍔熻兘灝佽閮藉緢鍒頒綅銆?/p>
緙虹偣錛氬竷灞娌℃湁綾諱技GTK+鐨凢ixed緇濆鍧愭爣鏂瑰紡錛圵indows SDK榛樿鐨勫乏涓婅鍍忕礌瀹氫綅鏂瑰紡錛夛紝鍦ㄦ煇浜涚晫闈㈡樉寰楄璁¢夯鐑︺?鍔ㄦ侀摼鎺ュ簱澶氱殑鍚撲漢錛屽伐紼嬭繃浜庤噧鑲褲?/p>
4. Qt, GTK+
鎹Windows涓嬩笉鏄緢濂界敤銆?/p>
5. DirectUI
鏈夊緢澶氫釜浜哄皝瑁呯被浼煎姛鑳界殑搴撱傜晫闈紝浠g爜鍒嗙, 浣?9%閮芥槸鏀惰垂
6. C# Windows Form
榪欐槸寰堝ソ鐨勯夋嫨錛岃璦鏂歸潰鍙互鐢–++/CLI 鍏嶅緱杞崲璇█
鑷敱鍋滈潬鍔熻兘鍙互浣跨敤WeiFenLuo.winFormsUI.Docking 闈炲父綆鍗?/p>
7. WPF
鏈夌闉嬪凡緇忎嬌鐢∕FC/C++閫氳繃鍔犺澆XML鏄劇ず鐣岄潰錛屼笉榪囬氳繃璧勬枡鏄劇ず錛學PF鐨勬帶浠跺緢灝戯紝鐢氳嚦榪炲師鐢熺殑PropertyGrid閮芥病鏈夛紝璁捐鍣ㄥ掓槸寰堝崕涓?/p>
鎬葷粨錛氱晫闈㈠簱鐨勯夋嫨鏈閲嶈鐨勪竴鐐瑰氨鏄湅鏈夋病鏈夊緢濂界殑璁捐鍣紝榪欎釜鏄珮鏁堝紑鍙戠殑閲嶄腑涔嬮噸銆傛垜灝婇噸MFC錛屾暚浠癕FC錛屽畠浣滀負C++鐨勬鏋跺簱鏉ヨ寰堜笉閿欙紝浣嗘槸瀵逛簬鐣岄潰璁捐榪樻槸榪囪佷簡銆傛垜浠紑鍙戠殑鏄駭鍝侊紝鍑虹殑鏄▼搴忥紝鑰屼笉鏄爺絀禡FC錛屾庢牱鐢ㄥソMFC銆?/p>
Lemon緋葷粺鐗規э細
1. 鏀寔 Canvas,Sprite,ImageSet錛堝浘鐗囧撫瀛樺偍浜庝竴寮犲浘鐗囷紝絳夊ぇ灝忥級
2. ImageSetEx錛堣嚜鐢辨憜鏀劇殑鍥劇墖甯т簬涓寮犲浘鐗囷級*
3. 鏀寔瀵硅薄鏃犲叧閿撫鏃朵嬌鐢ㄩ潤鎬佸睘鎬ц繘琛岃緗紝綾諱技浜嶩GE閲岀殑綺劇伒
4. 姣忎釜瀵硅薄鍧囧彲鎴愪負Container錛屽茍鎷ユ湁Child Node
5. 鍔ㄧ敾鍏抽敭甯х被鍨嬫敮鎸侊細緙╂斁錛屾棆杞紝浣嶇Щ錛岄鑹詫紝鍔ㄧ敾甯э紝閿氱偣錛岄煶鏁?
6. 鏀寔鎷懼彇
7. 鍩轟簬XML瀛樺偍鐨勬枃浠舵牸寮?/p>
8. 鍩轟簬Squirrel鏉鵑紶鑴氭湰鐨勯珮閫熼潰鍚戝璞¤剼鏈?
9. 鍥懼艦緋葷粺Graphics鎶借薄錛岄傜敤浜庝換浣曟覆鏌撹澶?/p>
10. 鎺т歡緋葷粺*
11. 瑙嗛鍥炴斁*
鎵鏈夊璞″潎鐢盧TTI鍒涘緩錛屾灇涓懼潎鏈塏amePool+Hash錛屽茍鐢變簬PropertySet鐨勫弽灝勭郴緇?/p>
LemonComposer緙栬緫鍣ㄧ壒鎬?/p>
鐣岄潰鍩轟簬鎴戝幓騫村紑鍙戠殑MotionUI錛宭ua
8+1鎺у埗鐐圭偣瀵硅薄璋冭妭灞炴?/p>
綾籄dobe Flash鐨勫撫緙栬緫銆?/p>
綾?DS Max鐨勫垎杞ㄩ亾鍏抽敭甯х紪杈戯紝鏈夊姪浜庝紭鍖朼rt assert
鑷敱璋冭妭瀵硅薄灞傜駭鍙婄埗瀛愬叧緋?/p>
鍏ㄥ姛鑳芥棤闄愬埗鑷敱Redo,Undo
*灝嗗湪鏈潵鐗堟湰鏀寔
2D娓告垙鏄嫭绔嬫父鎴忕殑涓繪祦錛屼篃鏄垱鎰忥紝鎶曞叆姣旀渶灝忕殑涓涓淮搴︺備絾鏄熀浜?D鐨勫ぇ澶氭槸涓浜涚被浼間簬HGE錛孖ndieLib絳夊紑婧愬厤璐?D寮曟搸銆備絾鏄潰瀵規父鎴忎腑澶ч噺鐨勫姩鐢昏岃█錛屽紑鍙戣呭ぇ澶氭槸浣跨敤鍥劇墖甯ф潵鍒朵綔錛岃櫧鐒舵晥鏋滃緢濂斤紝浣嗘槸璁懼璧勬簮濂界敤鍜屽埗浣滈毦搴︿篃鏄緢闅炬帶鍒剁殑銆?/p>
嫻佽浜庡幓騫寸殑妞嶇墿瀵瑰兊灝稿拰2004騫村彂琛岀殑RO Offline緇忚繃璧勬簮鍒嗘瀽錛屽氨鏄嬌鐢ㄧ被浼間簬Lemon緋葷粺錛屾垨鑰呰Flash鐨勭郴緇熷埗浣滆屾垚錛屽洜姝ゆ晥鏋滃拰鎵╁睍鎬ч潪甯稿ソ銆?/p>
榪欏氨鏄疞emon瀛樺湪鐨勭悊鐢便?/p>
Flash闈㈠悜鐨勬槸GDI+Web錛岄偅涔圠emon灝辨槸閽堝娓告垙涓撴湁鐨勶紝鍩轟簬紜歡鍔犻熺殑娓告垙妗嗘灦
Flash Action Script 瀵瑰簲鐨勫氨鏄疞emon鐨?a >Squirrel鑴氭湰
FlashIDE 瀵瑰簲鐨勫氨鏄疞emon Composer
Lemon鐨勭洰鏍囧氨鏄2D娓告垙寮鍙戞洿綆鍗曪紝璁╂父鎴忎腑鍏呮弧鏇村鐨勫姩鐢? 璁╂父鎴忓紑鍙戦毦搴﹂檷浣?/p>
鏈綆鍗曠殑鏂規硶鑾繃浜庡垽鏂紶鏍囩偣鏄惁鍦?涓笁瑙掑艦涓備絾鏄緢澶氬垽瀹氭柟娉曢兘鏄湁闂鐨勶紝姣斿璇?/p>
copy鑷狪ndieLib
bool Triangle2D::Inside2( const Vector2& p ) { Vector2 v0 = mP3 - mP1; Vector2 v1 = mP2 - mP1; Vector2 v2 = p - mP1; // Compute dot products float dot00 = Vector2::DotProduct( v0, v0 ); float dot01 = Vector2::DotProduct( v0, v1 ); float dot02 = Vector2::DotProduct( v0, v2 ); float dot11 = Vector2::DotProduct( v1, v1 ); float dot12 = Vector2::DotProduct( v1, v2 ); // Compute barycentric coordinates float invDenom = 1 / (dot00 * dot11 - dot01 * dot01); float u = (dot11 * dot02 - dot01 * dot12) * invDenom; float v = (dot00 * dot12 - dot01 * dot02) * invDenom; // Check if point is in triangle return (u > 0) && (v > 0) && (u + v < 1); }
Google鍑虹殑鏌愪漢浠g爜
float Triangle2D::CrossProduct3(const Vector2& p1,const Vector2& p2, const Vector2& p0 ) { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } bool Triangle2D::Inside( const Vector2& p ) { return (CrossProduct3(mP1,p,mP2)*CrossProduct3(mP3,p,mP2)<0) && (CrossProduct3(mP2,p,mP1)*CrossProduct3(mP3,p,mP1)<0) && (CrossProduct3(mP1,p,mP3)*CrossProduct3(mP2,p,mP3)<0); }
榪?涓柟娉曢兘鏈夌己闄鳳紝褰撶偣鍦ㄤ笁瑙掑艦杈逛笂鏃訛紝灝辨棤娉曞緱鍑恒傚綋鐢ㄥ湪涓涓鏂瑰艦鍒ゆ柇鏃訛紝姝f柟褰腑蹇冪偣灝卞垽瀹氫負娌℃湁鍦ㄥ叾鍐呴儴錛屾樉鐒舵槸涓涓敊璇?
涔嬪悗錛屽張Google鍑烘煇鍑犱釜澶т緺鐨勭畻娉曞拰鎬濇兂錛岃冭檻浜嗕笅錛屽垽瀹氱偣涓庡洓杈瑰艦閲嶅績鐐圭殑綰挎鏄惁涓庡洓杈瑰艦4鏉¤竟鐩鎬氦錛岀浉浜ゆ椂錛屽叾鍦ㄥ洓杈瑰艦澶栭儴錛屽弽涔嬩害鐒躲?
bool Quadrangle::Inside2( const Vector2& p ) { Vector2 c = Segement2D::GetCrossPoint( mP1, mP3, mP2, mP4 ); return !(Segement2D::Intersect( mP1, mP2, c, p) || Segement2D::Intersect( mP2, mP3, c, p) || Segement2D::Intersect( mP3, mP4, c, p) || Segement2D::Intersect( mP4, mP1, c, p) ); } bool Segement2D::Intersect( const Vector2& p1, const Vector2& p2,const Vector2& p3, const Vector2& p4 ) { float gradab, gradcd, ycptab, ycptcd, interceptX, intercepty; // In order to avoid divisions by zero //if (mP1.y == mP2.y) // mP2.y += 0.0001f; //if (mP1.x == mP2.x) // mP2.x += 0.0001f; //if (seg.mP1.y == seg.mP2.y) // seg.mP2.y += 0.0001f; //if (seg.mP1.x == seg.mP2.x) // seg.mP2.x += 0.0001f; // Calculates the intersection between the two lines gradab = (p1.y - p2.y) / (p1.x - p2.x); gradcd = (p3.y - p4.y) / (p3.x - p4.x); ycptab = p1.y - p1.x * gradab; ycptcd = p3.y - p3.x * gradcd; interceptX = (ycptab - ycptcd) / (gradcd - gradab); intercepty = (ycptab - (gradab * ycptcd) / gradcd) / (1 - gradab / gradcd); // Checking in the intersection is inside the segment if (!((interceptX >= p1.x && interceptX <= p2.x) || (interceptX >= p2.x && interceptX <= p1.x))) return 0; if (!((intercepty >= p1.y && intercepty <= p2.y) || (intercepty >= p2.y && intercepty <= p1.y))) return 0; if (!((interceptX >= p3.x && interceptX <= p4.x) || (interceptX >= p4.x && interceptX <= p3.x))) return 0; if (!((intercepty >= p3.y && intercepty <= p4.y) || (intercepty >= p4.y && intercepty <= p3.y))) return 0; return 1; } Vector2 Segement2D::GetCrossPoint(const Vector2& p1, const Vector2& p2, const Vector2& q1, const Vector2& q2) { //蹇呴』鐩鎬氦姹傚嚭鐨勬墠鏄嚎孌電殑浜ょ偣錛屼絾鏄笅闈㈢殑紼嬪簭孌墊槸閫氱敤鐨? /*鏍規嵁涓ょ偣寮忓寲涓烘爣鍑嗗紡錛岃繘鑰屾眰綰挎ф柟紼嬬粍*/ Vector2 crossPoint; //姹倄鍧愭爣 float tempLeft = (q2.x - q1.x) * (p1.y - p2.y) - (p2.x - p1.x) * (q1.y - q2.y); float tempRight = (p1.y - q1.y) * (p2.x - p1.x) * (q2.x - q1.x) + q1.x * (q2.y - q1.y) * (p2.x - p1.x) - p1.x * (p2.y - p1.y) * (q2.x - q1.x); crossPoint.x = tempRight / tempLeft; //姹倅鍧愭爣 tempLeft = (p1.x - p2.x) * (q2.y - q1.y) - (p2.y - p1.y) * (q1.x - q2.x); tempRight = p2.y * (p1.x - p2.x) * (q2.y - q1.y) + (q2.x- p2.x) * (q2.y - q1.y) * (p1.y - p2.y) - q2.y * (q1.x - q2.x) * (p2.y - p1.y); crossPoint.y = tempRight / tempLeft; return crossPoint; }
榪欎釜綆楁硶鏁堢巼騫朵笉鏄緢楂橈紝浣嗗浜庤璁″櫒鏉ヨ鏃犳墍璋撲簡錛屽鏋滄湁濂界殑鍑嗙‘綆楁硶錛屽彲浠ヨ璁?/p>
鏈綆鍗曠殑鏂規硶鑾繃浜庡垽鏂紶鏍囩偣鏄惁鍦?涓笁瑙掑艦涓備絾鏄緢澶氬垽瀹氭柟娉曢兘鏄湁闂鐨勶紝姣斿璇?/p>
copy鑷狪ndieLib
bool Triangle2D::Inside2( const Vector2& p ) { Vector2 v0 = mP3 - mP1; Vector2 v1 = mP2 - mP1; Vector2 v2 = p - mP1; // Compute dot products float dot00 = Vector2::DotProduct( v0, v0 ); float dot01 = Vector2::DotProduct( v0, v1 ); float dot02 = Vector2::DotProduct( v0, v2 ); float dot11 = Vector2::DotProduct( v1, v1 ); float dot12 = Vector2::DotProduct( v1, v2 ); // Compute barycentric coordinates float invDenom = 1 / (dot00 * dot11 - dot01 * dot01); float u = (dot11 * dot02 - dot01 * dot12) * invDenom; float v = (dot00 * dot12 - dot01 * dot02) * invDenom; // Check if point is in triangle return (u > 0) && (v > 0) && (u + v < 1); }
Google鍑虹殑鏌愪漢浠g爜
float Triangle2D::CrossProduct3(const Vector2& p1,const Vector2& p2, const Vector2& p0 ) { return (p1.x-p0.x)*(p2.y-p0.y)-(p2.x-p0.x)*(p1.y-p0.y); } bool Triangle2D::Inside( const Vector2& p ) { return (CrossProduct3(mP1,p,mP2)*CrossProduct3(mP3,p,mP2)<0) && (CrossProduct3(mP2,p,mP1)*CrossProduct3(mP3,p,mP1)<0) && (CrossProduct3(mP1,p,mP3)*CrossProduct3(mP2,p,mP3)<0); }
榪?涓柟娉曢兘鏈夌己闄鳳紝褰撶偣鍦ㄤ笁瑙掑艦杈逛笂鏃訛紝灝辨棤娉曞緱鍑恒傚綋鐢ㄥ湪涓涓鏂瑰艦鍒ゆ柇鏃訛紝姝f柟褰腑蹇冪偣灝卞垽瀹氫負娌℃湁鍦ㄥ叾鍐呴儴錛屾樉鐒舵槸涓涓敊璇?
涔嬪悗錛屽張Google鍑烘煇鍑犱釜澶т緺鐨勭畻娉曞拰鎬濇兂錛岃冭檻浜嗕笅錛屽垽瀹氱偣涓庡洓杈瑰艦閲嶅績鐐圭殑綰挎鏄惁涓庡洓杈瑰艦4鏉¤竟鐩鎬氦錛岀浉浜ゆ椂錛屽叾鍦ㄥ洓杈瑰艦澶栭儴錛屽弽涔嬩害鐒躲?
bool Quadrangle::Inside2( const Vector2& p ) { Vector2 c = Segement2D::GetCrossPoint( mP1, mP3, mP2, mP4 ); return !(Segement2D::Intersect( mP1, mP2, c, p) || Segement2D::Intersect( mP2, mP3, c, p) || Segement2D::Intersect( mP3, mP4, c, p) || Segement2D::Intersect( mP4, mP1, c, p) ); } bool Segement2D::Intersect( const Vector2& p1, const Vector2& p2,const Vector2& p3, const Vector2& p4 ) { float gradab, gradcd, ycptab, ycptcd, interceptX, intercepty; // In order to avoid divisions by zero //if (mP1.y == mP2.y) // mP2.y += 0.0001f; //if (mP1.x == mP2.x) // mP2.x += 0.0001f; //if (seg.mP1.y == seg.mP2.y) // seg.mP2.y += 0.0001f; //if (seg.mP1.x == seg.mP2.x) // seg.mP2.x += 0.0001f; // Calculates the intersection between the two lines gradab = (p1.y - p2.y) / (p1.x - p2.x); gradcd = (p3.y - p4.y) / (p3.x - p4.x); ycptab = p1.y - p1.x * gradab; ycptcd = p3.y - p3.x * gradcd; interceptX = (ycptab - ycptcd) / (gradcd - gradab); intercepty = (ycptab - (gradab * ycptcd) / gradcd) / (1 - gradab / gradcd); // Checking in the intersection is inside the segment if (!((interceptX >= p1.x && interceptX <= p2.x) || (interceptX >= p2.x && interceptX <= p1.x))) return 0; if (!((intercepty >= p1.y && intercepty <= p2.y) || (intercepty >= p2.y && intercepty <= p1.y))) return 0; if (!((interceptX >= p3.x && interceptX <= p4.x) || (interceptX >= p4.x && interceptX <= p3.x))) return 0; if (!((intercepty >= p3.y && intercepty <= p4.y) || (intercepty >= p4.y && intercepty <= p3.y))) return 0; return 1; } Vector2 Segement2D::GetCrossPoint(const Vector2& p1, const Vector2& p2, const Vector2& q1, const Vector2& q2) { //蹇呴』鐩鎬氦姹傚嚭鐨勬墠鏄嚎孌電殑浜ょ偣錛屼絾鏄笅闈㈢殑紼嬪簭孌墊槸閫氱敤鐨? /*鏍規嵁涓ょ偣寮忓寲涓烘爣鍑嗗紡錛岃繘鑰屾眰綰挎ф柟紼嬬粍*/ Vector2 crossPoint; //姹倄鍧愭爣 float tempLeft = (q2.x - q1.x) * (p1.y - p2.y) - (p2.x - p1.x) * (q1.y - q2.y); float tempRight = (p1.y - q1.y) * (p2.x - p1.x) * (q2.x - q1.x) + q1.x * (q2.y - q1.y) * (p2.x - p1.x) - p1.x * (p2.y - p1.y) * (q2.x - q1.x); crossPoint.x = tempRight / tempLeft; //姹倅鍧愭爣 tempLeft = (p1.x - p2.x) * (q2.y - q1.y) - (p2.y - p1.y) * (q1.x - q2.x); tempRight = p2.y * (p1.x - p2.x) * (q2.y - q1.y) + (q2.x- p2.x) * (q2.y - q1.y) * (p1.y - p2.y) - q2.y * (q1.x - q2.x) * (p2.y - p1.y); crossPoint.y = tempRight / tempLeft; return crossPoint; }
榪欎釜綆楁硶鏁堢巼騫朵笉鏄緢楂橈紝浣嗗浜庤璁″櫒鏉ヨ鏃犳墍璋撲簡錛屽鏋滄湁濂界殑鍑嗙‘綆楁硶錛屽彲浠ヨ璁?/p>
寰蔣瀹樻柟涓枃MSDN錛?a >http://msdn.microsoft.com/zh-cn/library/cc838158(VS.95).aspx
寰蔣瀹樻柟鑻辨枃MSDN渚嬪瓙錛?a >http://samples.msdn.microsoft.com/Silverlight/SampleBrowser/index.htm#/?sref=HomePage
緗戜笂寰堝SilverLight鍜孎lash姣旇緝鐨勬枃绔狅紝甯歌鐨勫張鏄淔lash鏉鎵嬧濓紝鈥滃叏鏂伴鍩熲濅箣綾葷殑瀛楃溂銆傚弽瑙傞瓍鏃廙8鍜宨Phone錛屼篃鏄繖涔堝啓鐨勩傚緢鏄庢樉閮芥槸鈥滀簲姣涘厷鈥濈殑鏋枃錛屾垨鑰呬竴浜涙棤鑱婂皬緙栫畝鍗曠殑瑙佽В銆?/p>
浣犺榪嘢ilverLight鍋氱殑鍔ㄧ敾鐗囦箞錛?榪欑偣涓嶅鎬紝 SilverLight鐨勬牳蹇冩槸WPF錛屼篃灝辨槸Windows鐨勪笅涓浠g晫闈㈣璁$悊蹇點傛棭鏈熺殑鐞嗗康璇稿錛歁FC錛?WTL錛?Net銆傛牴鎹垜鐮旂┒鐪嬫潵錛孲ilverLight鐨勫姩鐢婚兘鏄熀浜庝唬鐮佺殑錛屾墍浠ヤ綘涓嶅笇鏈涗竴閮ㄥ姩鐢葷墖鏄敤綰墜宸ユ柟寮忕紪鍐欎唬鐮佹潵鍒朵綔鍚?
Flash鏄簮鑷簬FutureSplash Animator錛屾棭鏈熺増鏈彧鏄竴涓畝鍗曡璁″姩鐢葷殑緙栬緫鍣紝鍥犱負瀵瑰撫闇瑕佹帶鍒訛紝鎵浠ュ姞鍏ヤ簡ActionScript浣滀負鍏舵帶鍒惰璦銆傚悗鏈熼愭鍙戝睍澹ぇ錛岃寰?002騫存椂錛屾浘緇忚榪囨湁灝嗚棰戞牸寮忓鎴恠wf鏍煎紡榪涜鎾斁錛屼粠姝わ紝榪欑鎶鏈笎娓愬彂灞曟垚涓虹幇鍦ㄦ祦琛岀殑FLV銆備互鑷充簬鍒扮幇鍦ㄥ己澶х殑RIA銆?/p>
鎵浠ヨ繖涔堢湅鏉ワ紝SilverLight鍗充究鍙戝睍鍒癝ilverLight 4錛屼篃鏃犳硶鍦ㄥ姩鐢繪柟闈㈣秴榪嘑lash錛岄櫎闈炴坊鍔犱竴濂楃被浼糉lash鐨勫姩鐢葷紪杈戝櫒銆傚仛鍔ㄧ敾錛屽繀閫塅lash錛岃屼笖鍏跺彲浠ヨ法騫沖彴錛岃鍑犵巼闈炲父楂樸備笉榪囧仛RIA錛屽皬鍙椾紬緹や嬌鐢╒isual Studio鐨勫己澶у伐鍏鋒惌閰峉ilverLight/C#灝嗕細澶уぇ闄嶄綆寮鍙戞垚鏈?/p>
GameBryo寮曟搸涓敮鎸佸師鐢熺殑C++ GAME UI錛屼篃鏀寔鐩存帴鎾斁flash錛岃繖閮ㄥ垎錛圫caleForm錛変嬌鐢ㄧ殑鏄互GameSwf涓哄熀紜鐨勬墜鍔ㄨВ鏋恌lash鏂囦歡錛屽洜姝ゅ湪緙栬緫妗嗙瓑鏂歸潰鍋氱殑闈炲父濂姐?
Flash鐨刄I寮鍙戠伒媧誨害寰堥珮錛屽簳灞傚簱bug灝戯紝浣嗘槸涓庣幇鏈夊伐紼嬬粨鍚堥毦搴﹀ぇ錛屽洜姝や粛鐒惰漿鍚戠爺絀朵互XML涓哄熀紜鐨刄I搴撹璁°?
榪欓噷鎺ㄨ崘鍑犱釜鍙傝冿細
WowBench錛?http://sourceforge.net/projects/wowbench/
榪欐槸欖斿吔涓栫晫鐨刄I鐨勬ā鎷熷櫒錛屽紑婧愶紝鍙互浠庝腑浜嗚В欖斿吔涓栫晫鐨勫熀鏈琔I鏋舵瀯鍙夾PI鏋勬垚銆傚悓鏃訛紝欖斿吔鐨刲ua鑴氭湰鍦ㄥ畨鍏ㄦу拰寮鍙戝害涓婂仛鐨勯潪甯稿ソ錛岃繖閮ㄥ垎鍙互鍙傝冧笅銆?
Mozilla XUL錛?a >https://developer.mozilla.org/En/XUL
榪欐槸Mozilla鎴樼暐涓殑涓涓噸瑕佺粍鎴愰儴鍒嗭紝榪欏UI鏀寔綾諱技浜巜xWidgets鎴栬匟TML鏂瑰紡鐨勬帓鐗?/p>
Dskinlite 鏄竴嬈捐交閲忕駭鐨?span style="font-family:Arial">C++鐨偆搴擄紝浣跨敤XML鏂囦歡鏍規嵁瑙勫垯鏉ョ鐞?span style="font-family:Arial">GDI璧勬簮濡傞鑹詫紝瀛椾綋錛屽浘鐗囷紝騫舵弿榪扮晫闈㈡瀯鎴愶紝鏈澶х▼搴︾殑灝嗙晫闈㈠拰紼嬪簭閫昏緫鍒嗙錛屽悓鏃朵負杞歡鐨偆鏇存崲錛屾崲鑹茬瓑鎻愪緵鍩虹鏀寔銆?span style="font-family:Arial">DSkinLite灝嗙晫闈㈡瀯鎴愬厓绱犳娊璞′負綰挎潯鍏冪礌錛岀煩褰㈠厓绱狅紝鍥劇墖鍏冪礌錛屾枃鏈厓绱狅紝騫舵彁渚涚浉搴旇鍒欐潵浣跨敤榪欎簺鍏冪礌"緇勫悎"鐣岄潰銆?span style="font-family:Arial">DSkinlite寮鍙戝洟闃熸湁杈冩繁鐨?span style="font-family:Arial">Windows鐣岄潰寮鍙戠殑瀹為檯緇忓巻錛屽杞歡鐣岄潰澶勭悊棰囨湁蹇冨緱錛岃嚧鍔涗簬灝嗗疄鐢紝楂樻晥錛屽墠娌跨殑鐣岄潰澶勭悊鎶鏈粙緇嶇粰騫垮ぇ寮鍙戜漢鍛樸?span style="font-family:Arial">
DSkinLite涓庡叾浠栫晫闈㈠簱鐩告瘮鏈変互涓嬬壒鐐癸細
娌℃湁閲囩敤Hook鎵鏈夎繘紼嬫秷鎭殑鏂瑰紡錛屽洜姝ゆ病鏈夋浛鎹㈢郴緇熺浉鍏沖璇濇銆?span style="font-family:Arial">DSkinLite鍙槸閲囩敤MFC錛?span style="font-family:Arial">ATL絳?span style="font-family:Arial">framework綾諱技鐨勬柟寮忥紝綆鍗曟浛鎹㈢獥鍙h繃紼嬶紝鎴彇鐣岄潰緇樺埗絳夋秷鎭紝瀵瑰簲鐢ㄧ▼搴忔潵璇村熀鏈笂鏄忔槑鐨勩備粠榪欎釜鏂歸潰璁詫紝DSkinLite鏄竴嬈捐交閲忕駭鐨勭晫闈㈠簱銆?span style="font-family:Arial">
鍚屾椂錛?span style="font-family:Arial">DSkinLite娌℃湁鐗瑰埆鐨?span style="font-family:Arial">Frameword鐨勪緷璧栵紝鍙互鍦?span style="font-family:Arial">Win32錛?span style="font-family:Arial">MFC,ATL,WTL絳夌幆澧冧腑浣跨敤銆?span style="font-family:Arial"> DSkinLite鐣岄潰搴撲嬌鐢?span style="font-family:Arial">XML綆$悊GDI璧勬簮騫墮厤緗獥鍙g晫闈紝鐢ㄦ埛鍙互鏂逛究鐨勪繚鎸佺晫闈㈢殑涓鑷存э紝鍚屾椂鍙互寰堟柟渚跨殑鏋勯犲嚭鏇村鐨勭獥鍙f牱寮?span style="font-family:Arial">
鐣岄潰搴撶殑楂樻晥鎬с?span style="font-family:Arial">DSkinLite灝嗕笓娉ㄤ簬紼嬪簭搴撶殑楂樻晥鎬э紝鍏蜂綋琛ㄧ幇鍦ㄥ唴瀛樺崰鐢紝鐣岄潰緇樺埗閫熷害錛岀晫闈㈤槻姝㈤棯鐑侊紝紼嬪簭鍔犺澆鍥劇墖璧勬簮銆佽В鏋?span style="font-family:Arial">XML鏂囦歡鐨勯熷害絳夋柟闈紝鎴戜滑鍋氫簡寰堝宸ヤ綔錛屽茍涓嶆柇鎸佺畫浼樺寲銆備互鏈熸湜紼嬪簭鍚勬柟闈㈣〃鐜版渶涓洪珮鏁堢殑鐣岄潰紼嬪簭搴撱?span style="font-family:Arial">
DSkinLite 鐨偆搴撶殑紼嬪簭鏋舵瀯鑰冭檻鍒板彲鑳藉嚭鐜扮殑鐣岄潰鐗規晥錛屼嬌寰楀疄鐜拌濡傞忔槑錛屾笎闅愭笎鏄撅紝鍔ㄧ敾絳夌晫闈㈢壒鏁堝彉寰楁洿鍔犲鏄擄紝鐩墠鏀寔澶у鏁版帶浠剁殑閫忔槑鏁堟灉錛屽悗緇細鏍規嵁鐢ㄦ埛闇姹傦紝寮鍙戞洿澶氱殑瀹炵敤鐨勭晫闈㈢壒鏁堛?span style="font-family:Arial">
XML璇硶綆鍗曪紝鏄撲簬瀛︿範鍜屾帉鎻?span style="font-family:Arial">
鏀寔婊氬姩鏉℃帶浠訛紝鍚屾椂鏀寔鎵鏈夊唴緗粴鍔ㄦ潯鎺у埗
璇ョ綉绔欒繕鎻愬埌涓涓狣irectUI鐨勪笢瑗匡紝榪欎釜涓滆タ鏄竴縐峸indowless鐨勬灦鏋勶紝鍏蜂綋姒傚康綾諱技浜庢父鎴忎腑鐨刄I錛屼笉渚濊禆騫沖彴鍙ユ焺錛屽洜姝ゅ鎸傚彧鑳芥埅鍙栬濡俀Q鍩轟簬ATL鐨勫紿楀彛錛屼絾鏄棤娉曡幏鍙栫獥鍙e唴閮ㄧ殑鏁版嵁