本文整理汇总了C++中sf::Window类的典型用法代码示例。如果您正苦于以下问题:C++ Window类的具体用法?C++ Window怎么用?C++ Window使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Window类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: checkCollision
//Checks for a collision between the character and the passed window:
Collision Character::checkCollision(sf::Window& window) const
{
//Gets the sides of the character:
float topA, bottomA, leftA, rightA;
topA = _sprite.getGlobalBounds().top;
bottomA = _sprite.getGlobalBounds().height + topA;
leftA = _sprite.getGlobalBounds().left;
rightA = _sprite.getGlobalBounds().width + leftA;
//Top:
if(topA < 0)
return COLLISION_TOP;
//Bottom:
if(bottomA > window.getSize().y)
return COLLISION_BOTTOM;
//Left:
if(leftA < 0)
return COLLISION_LEFT;
//Right:
if(rightA > window.getSize().x)
return COLLISION_RIGHT;
//Otherwise there is no collision:
return COLLISION_NONE;
}
开发者ID:banana-ade,项目名称:banana-ade,代码行数:29,代码来源:character.cpp
示例2: mainEventHandler
void mainEventHandler(sf::Window &window){
sf::Event event;
while (window.pollEvent(event))
{
switch (event.type){
case sf::Event::Closed:
window.close();
break;
case sf::Event::KeyPressed:
keyPressedHandler(event);
break;
case sf::Event::KeyReleased:
keyReleasedHandler(event);
break;
case sf::Event::LostFocus:
/* pause(); */
break;
case sf::Event::GainedFocus:
/* resume(); */
break;
default: break;
}
}
}
开发者ID:Tibigorno,项目名称:Project-AAAA,代码行数:32,代码来源:event.cpp
示例3: saveImage
void video::saveImage(sf::Window &app, int framerate)
{
if (!app.isOpen())
return ;
sf::Vector2u size = app.getSize();
if (videoTexture.getSize().y != size.y)
videoTexture.create(size.x, size.y);
if (videoTimer.getElapsedTime().asMilliseconds() > 1000/framerate)
{
videoTimer.restart();
std::ostringstream videoFramePath;
videoFramePath << "/tmp/gl-engine-"
<< std::setw(5)
<< std::setfill('0')
<< currentVideoFrame
<< ".jpg";
videoTexture.update(app);
sf::Image videoImage = videoTexture.copyToImage();
videoImage.saveToFile(videoFramePath.str());
currentVideoFrame++;
}
}
开发者ID:marianstan7,项目名称:gl-engine-42,代码行数:25,代码来源:video.cpp
示例4: initOpenGL
void initOpenGL() {
// Initialize GLEW on Windows, to make sure that OpenGL 2.0 is loaded
#ifdef FRAMEWORK_USE_GLEW
GLuint error = glewInit();
if (GLEW_OK != error) {
std::cerr << glewGetErrorString(error) << std::endl;
exit(-1);
}
if (!GLEW_VERSION_2_0 || !GL_EXT_framebuffer_object) {
std::cerr << "This program requires OpenGL 2.0 and FBOs" << std::endl;
exit(-1);
}
#endif
// This initializes OpenGL with some common defaults. More info here:
// http://www.sfml-dev.org/tutorials/1.6/window-opengl.php
glClearDepth(1.0f);
//glClearColor(0.529f, 0.808f, 0.980f, 1.0f);//sky blue
//glClearColor(0.529f, 0.808f, 0.980f, 1.0f);//sky blue
glClearColor(0.15f, 0.15f, 0.15f, 1.0f);//sky blue
glEnable(GL_DEPTH_TEST);
GL_CHECK(glEnable(GL_TEXTURE_2D));
glViewport(0, 0, window.GetWidth(), window.GetHeight());
}
开发者ID:OliviaXu,项目名称:AMazing,代码行数:25,代码来源:Main.cpp
示例5: windowEvents
void
windowEvents ( sf::Window& window)
{
sf::Event e;
while ( window.pollEvent ( e ) ) {
if ( e.type == sf::Event::Closed ) {
window.close();
}
}
}
开发者ID:Hopson97,项目名称:Simple-OpenGL-Rectangle-,代码行数:11,代码来源:main.cpp
示例6: renderLoop
void renderLoop(sf::Window & window)
{
sf::Clock time;
WorldState state;
while (state.isRunning())
{
this->handleEvents(window, state);
state.timeStep( time.getElapsedTime().asSeconds() );
engine.display(state);
window.display();
}
window.close();
}
开发者ID:mimaun,项目名称:Computer-Graphics,代码行数:14,代码来源:main.cpp
示例7: initOpenGL
void initOpenGL() {
// Initialize GLEW on Windows, to make sure that OpenGL 2.0 is loaded
#ifdef FRAMEWORK_USE_GLEW
GLint error = glewInit();
if (GLEW_OK != error) {
std::cerr << glewGetErrorString(error) << std::endl;
exit(-1);
}
if (!GLEW_VERSION_2_0 || !GL_EXT_framebuffer_object) {
std::cerr << "This program requires OpenGL 2.0 and FBOs" << std::endl;
exit(-1);
}
#endif
// This initializes OpenGL with some common defaults. More info here:
// http://www.sfml-dev.org/tutorials/1.6/window-opengl.php
glClearDepth(1.0f);
glClearColor(0.15f, 0.15f, 0.15f, 1.0f);
glEnable(GL_DEPTH_TEST);
glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);
glViewport(0, 0, window.GetWidth(), window.GetHeight());
position = aiVector3D(35.0, -20.0, 0.0);
yaw = M_PI * 3 / 2.0;
pitch = -M_PI / 7;
GLfloat light0_position[] = { 0.0, 30.0, 0.0, 0.0 };
GLfloat light0_ambient[] = { 245/2550.0, 222/2550.0, 179/2550.0, 1 };
GLfloat light0_diffuse[] = { 245/255.0, 232/255.0, 199/255.0, 1 };
GLfloat light0_specular[] = { 0.7, 0.7, 0.7, 1 };
GLfloat shininess = 90;
glLightfv(GL_LIGHT0, GL_POSITION, light0_position);
glLightfv( GL_LIGHT0, GL_AMBIENT, light0_ambient );
glLightfv( GL_LIGHT0, GL_DIFFUSE, light0_diffuse );
glLightfv( GL_LIGHT0, GL_SPECULAR, light0_specular );
glLightfv( GL_LIGHT0, GL_SHININESS, &shininess );
glEnable(GL_LIGHT0);
GLfloat light1_position[] = { 0, 11, 0, 0.0 };
GLfloat light1_diffuse[] = { 145/2550.0, 222/2550.0, 149/2550.0, 1 };
GLfloat light1_specular[] = { 0.1, 0.1, 0.1, 1 };
glLightfv( GL_LIGHT1, GL_POSITION, light1_position );
glLightfv( GL_LIGHT1, GL_DIFFUSE, light1_diffuse );
glLightfv( GL_LIGHT1, GL_SPECULAR, light1_specular );
glEnable(GL_LIGHT1);
depthRenderTarget = new DepthRenderTarget(RENDER_WIDTH * SHADOW_MAP_RATIO, RENDER_HEIGHT * SHADOW_MAP_RATIO);
}
开发者ID:mrotondo,项目名称:ccrma,代码行数:48,代码来源:Main.cpp
示例8: initialize
////////////////////////////////////////////////////////////
/// Initialize OpenGL states into the specified view
///
/// \param Window Target window to initialize
///
////////////////////////////////////////////////////////////
void initialize(sf::Window& window)
{
// Activate the window
window.setActive();
// Setup OpenGL states
// Set color and depth clear value
glClearDepth(1.f);
glClearColor(0.f, 0.5f, 0.5f, 0.f);
// Enable Z-buffer read and write
glEnable(GL_DEPTH_TEST);
glDepthMask(GL_TRUE);
// Setup a perspective projection
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
static const double pi = 3.141592654;
GLdouble extent = std::tan(90.0 * pi / 360.0);
glFrustum(-extent, extent, -extent, extent, 1.0, 500.0);
// Enable position and texture coordinates vertex components
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
}
开发者ID:CastBart,项目名称:AndroidTesting,代码行数:31,代码来源:X11.cpp
示例9: FreeFlyControl
void Camera::FreeFlyControl(const sf::Window& window, sf::Time elapsedTime)
{
if(sf::Keyboard::isKeyPressed(sf::Keyboard::A))
{
Move(GEAR::LEFT, elapsedTime.asSeconds());
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::D))
{
Move(GEAR::RIGHT, elapsedTime.asSeconds());
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::S))
{
Move(GEAR::BACKWARD, elapsedTime.asSeconds());
}
if(sf::Keyboard::isKeyPressed(sf::Keyboard::W))
{
Move(GEAR::FORWARD, elapsedTime.asSeconds());
}
sf::Vector2u screenSize = window.getSize();
sf::Vector2i windowCenterPos(screenSize.x/2,screenSize.y/2);
sf::Vector2i mouseOffset = sf::Mouse::getPosition(window) - windowCenterPos;
Turn(mouseOffset.x * SENSITIVITY, -mouseOffset.y * SENSITIVITY);
}
开发者ID:rokn,项目名称:GEAR,代码行数:26,代码来源:camera.cpp
示例10: pollEvents
void EventBuffer::pollEvents(sf::Window& window)
{
sf::Event event;
while (window.pollEvent(event))
pushEvent(event);
}
开发者ID:krichard1988,项目名称:Thor,代码行数:7,代码来源:ActionOperations.cpp
示例11: Initialize
bool Engine::Initialize(sf::Window &window, int numThreads, LogLevel level, const char* logfile,
bool console, const LogFormatter &formatter, bool append)
{
Log<0>::Initialize(std::move(level), std::move(logfile), std::move(console), formatter, std::move(append));
ThreadUtil::Initialize(std::move(numThreads));
ThreadUtil::Instance()->SetMainThread();
FURYD << ThreadUtil::Instance()->GetWorkerCount() << " thread launched!";
MeshUtil::m_UnitQuad = MeshUtil::CreateQuad("quad_mesh", Vector4(-1.0f, -1.0f, 0.0f), Vector4(1.0f, 1.0f, 0.0f));
MeshUtil::m_UnitCube = MeshUtil::CreateCube("cube_mesh", Vector4(-1.0f), Vector4(1.0f));
MeshUtil::m_UnitIcoSphere = MeshUtil::CreateIcoSphere("ico_sphere_mesh", 1.0f, 2);
MeshUtil::m_UnitSphere = MeshUtil::CreateSphere("sphere_mesh", 1.0f, 20, 20);
MeshUtil::m_UnitCylinder = MeshUtil::CreateCylinder("cylinder_mesh", 1.0f, 1.0f, 1.0f, 4, 10);
MeshUtil::m_UnitCone = MeshUtil::CreateCylinder("cone_mesh", 0.0f, 1.0f, 1.0f, 4, 10);
InputUtil::Initialize(window.getSize().x, window.getSize().y);
#ifdef _FURY_FBXPARSER_IMP_
FbxParser::Initialize();
#endif
int flag = gl::LoadGLFunctions();
RenderUtil::Initialize();
BufferManager::Initialize();
#ifdef _FURY_GUI_IMP_
Gui::Initialize(&window);
#endif
if (flag == 1)
return true;
if (flag < 1)
{
FURYE << "Failed to load gl functions.";
}
else
{
FURYE << "Failed to load " << flag - 1 << " gl functions.";
}
return false;
}
开发者ID:sindney,项目名称:fury3d,代码行数:47,代码来源:Engine.cpp
示例12: Init
void Init(sf::Window& window, sf::RenderTarget& target, bool loadDefaultFont)
{
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
io.BackendFlags |= ImGuiBackendFlags_HasSetMousePos;
// init keyboard mapping
io.KeyMap[ImGuiKey_Tab] = sf::Keyboard::Tab;
io.KeyMap[ImGuiKey_LeftArrow] = sf::Keyboard::Left;
io.KeyMap[ImGuiKey_RightArrow] = sf::Keyboard::Right;
io.KeyMap[ImGuiKey_UpArrow] = sf::Keyboard::Up;
io.KeyMap[ImGuiKey_DownArrow] = sf::Keyboard::Down;
io.KeyMap[ImGuiKey_PageUp] = sf::Keyboard::PageUp;
io.KeyMap[ImGuiKey_PageDown] = sf::Keyboard::PageDown;
io.KeyMap[ImGuiKey_Home] = sf::Keyboard::Home;
io.KeyMap[ImGuiKey_End] = sf::Keyboard::End;
io.KeyMap[ImGuiKey_Insert] = sf::Keyboard::Insert;
#ifdef ANDROID
io.KeyMap[ImGuiKey_Backspace] = sf::Keyboard::Delete;
#else
io.KeyMap[ImGuiKey_Delete] = sf::Keyboard::Delete;
io.KeyMap[ImGuiKey_Backspace] = sf::Keyboard::BackSpace;
#endif
io.KeyMap[ImGuiKey_Space] = sf::Keyboard::Space;
io.KeyMap[ImGuiKey_Enter] = sf::Keyboard::Return;
io.KeyMap[ImGuiKey_Escape] = sf::Keyboard::Escape;
io.KeyMap[ImGuiKey_A] = sf::Keyboard::A;
io.KeyMap[ImGuiKey_C] = sf::Keyboard::C;
io.KeyMap[ImGuiKey_V] = sf::Keyboard::V;
io.KeyMap[ImGuiKey_X] = sf::Keyboard::X;
io.KeyMap[ImGuiKey_Y] = sf::Keyboard::Y;
io.KeyMap[ImGuiKey_Z] = sf::Keyboard::Z;
io.BackendFlags |= ImGuiBackendFlags_HasGamepad;
s_joystickId = getConnectedJoystickId();
for (unsigned int i = 0; i < ImGuiNavInput_COUNT; i++) {
s_joystickMapping[i] = NULL_JOYSTICK_BUTTON;
}
initDefaultJoystickMapping();
// init rendering
io.DisplaySize = static_cast<sf::Vector2f>(target.getSize());
if (s_fontTexture) { // delete previously created texture
delete s_fontTexture;
}
s_fontTexture = new sf::Texture;
if (loadDefaultFont) {
// this will load default font automatically
// No need to call AddDefaultFont
UpdateFontTexture();
}
s_windowHasFocus = window.hasFocus();
}
开发者ID:eliasdaler,项目名称:imgui-sfml,代码行数:59,代码来源:imgui-SFML.cpp
示例13: setMatrices
void setMatrices(const aiScene * scene) {
// Set up the projection and model-view matrices
GLfloat aspectRatio = (GLfloat)window.GetWidth()/window.GetHeight();
GLfloat nearClip = 0.1f;
GLfloat farClip = 500.0f;
GLfloat fieldOfView = 45.0f; // Degrees
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(fieldOfView, aspectRatio, nearClip, farClip);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(current_location.x, current_location.y, current_location.z,
current_location.x + current_forward.x,
current_location.y + current_forward.y,
current_location.z + current_forward.z, 0.0f, 1.0f, 0.0f);
setupLights();
// Pass in our view matrix for cubemapping purposes
// note: this may not be the best place to actually pass it to the shader...
int shaderNum = 1;
GLfloat* vMatrix = new GLfloat[16];
glGetFloatv(GL_MODELVIEW_MATRIX, vMatrix);
// // Ugly, ugly, UGLY!
// aiMatrix4x4 invertMe = aiMatrix4x4(vMatrix[0], vMatrix[1], vMatrix[2], vMatrix[3], vMatrix[4], vMatrix[5], vMatrix[6], vMatrix[7], vMatrix[8], vMatrix[9], vMatrix[10], vMatrix[11], vMatrix[12], vMatrix[13], vMatrix[14], vMatrix[15]);
// aiMatrix4x4 inverted = invertMe.Inverse();
// GLfloat* vInvMatrix = new GLfloat{ inverted.a1, inverted.a2, inverted.a3, inverted.a4, inverted.b1, inverted.b2, inverted.b3, inverted.b4, inverted.c1, inverted.c2, inverted.c3, inverted.c4};
GLint vM = glGetUniformLocation(shaders[shaderNum]->programID(), "viewMatrix");
glUniformMatrix4fv(vM,1,true,vMatrix);
applyMatrixTransform(scene->mRootNode);
}
开发者ID:,项目名称:,代码行数:35,代码来源:
示例14: SFMLApplication
SFMLApplication(): contextSettings(32),
window(sf::VideoMode(800, 600), "Skeletal Animation Library", sf::Style::Default, contextSettings),
astroBoyMovingGlasses(astroBoy.model), astroBoyHeadBanging(astroBoy.model) {
//Output bone hierarchy of astroBoy model:
printBoneHierarchy(astroBoy.model);
window.setFramerateLimit(144);
window.setVerticalSyncEnabled(true);
//Various settings
glClearColor(0.5, 0.5, 0.5, 0.0f);
glEnable(GL_DEPTH_TEST);
glDepthFunc(GL_LESS);
glEnable(GL_TEXTURE_2D);
//Lighting
GLfloat light_color[] = {0.9, 0.9, 0.9, 1.f};
glMaterialfv(GL_FRONT, GL_DIFFUSE, light_color);
glEnable(GL_LIGHTING);
glEnable(GL_LIGHT0);
//Setup projection matrix
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
//45° Field of View, 4:3 ratio, display range : 0.1 unit <-> 100 units
gluPerspective(45.0, 4.0 / 3.0, 0.1, 100.0);
glMatrixMode(GL_MODELVIEW);
}
开发者ID:uetoyo,项目名称:Skeletal-Animation-Library,代码行数:29,代码来源:sfml_examples.cpp
示例15: handleEvents
void handleEvents()
{
const sf::Input& Input = App->GetInput();
bool shiftDown = Input.IsKeyDown(sf::Key::LShift) || Input.IsKeyDown(sf::Key::RShift);
sf::Event Event;
while (App->GetEvent(Event))
{
if (Event.Type == sf::Event::Closed)
App->Close();
if ((Event.Type == sf::Event::KeyPressed) && (Event.Key.Code == sf::Key::Escape))
App->Close();
// This is for grading your code. DO NOT REMOVE
if(Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::Space) {
firing = 6;
}
if(Event.Type == sf::Event::KeyReleased && Event.Key.Code == sf::Key::Space) {
firing = 0;
}
if(Event.Type == sf::Event::KeyPressed && Event.Key.Code == sf::Key::F12){
render = RenderEngine();
render.init();
}
if (Event.Type == sf::Event::Resized)
{ glViewport(0, 0, Event.Size.Width, Event.Size.Height); }
}
}
开发者ID:timaeudg,项目名称:3DAsteroids,代码行数:30,代码来源:program5.cpp
示例16: renderFrame
void renderFrame() {
glUseProgram(_mainShader.programID());
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(45.0f, _window.GetWidth()/_window.GetHeight(), 0.1f, 500);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
_camera.setViewTransform();
/*
glBegin(GL_TRIANGLES);
glVertex2f(0.0f, 0.0f);
glVertex2f(1.0f, 0.0f);
glVertex2f(1.0f, 1.0f);
glEnd();*/
for (int i =0; i < _scene._VBOs.size(); i++) {
Scene::VBO vbo = _scene._VBOs.at(i);
glBindBuffer(GL_ARRAY_BUFFER, vbo.position);
glVertexAttribPointer(_mainShader.getAttribLocationOf("positionIn"), 3, GL_FLOAT, GL_FALSE, sizeof(aiVector3D), 0);
glBindBuffer(GL_ARRAY_BUFFER, vbo.texcoord);
glVertexAttribPointer(_mainShader.getAttribLocationOf("texcoordIn"), 2, GL_FLOAT, GL_FALSE, sizeof(aiVector3D), 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, vbo.indices);
glDrawElements(GL_TRIANGLES, vbo.numIndices, GL_UNSIGNED_INT, 0);
}
}
开发者ID:tatianai,项目名称:Movie-Maker,代码行数:25,代码来源:main.cpp
示例17: inputFn
void inputFn()
{
sf::Event evt;
while (window.GetEvent(evt)) {
if (window.GetInput().IsKeyDown(sf::Key::Down)) {
if (max_tess > 1) max_tess -= 1;
}
else if(window.GetInput().IsKeyDown(sf::Key::Up)) {
if (max_tess < 50) max_tess += 1;
}
switch (evt.Type) {
case sf::Event::Closed:
window.Close();
break;
case sf::Event::KeyPressed:
fflag = evt.Key.Code;
break;
case sf::Event::KeyReleased:
fflag = 0;
if (evt.Key.Code == 'r')
move = !move;
break;
case sf::Event::MouseMoved:
mouse = vec2(evt.MouseMove.X,
WIN_H - evt.MouseMove.Y);
break;
default:
break;
}
}
}
开发者ID:mwlow,项目名称:flying,代码行数:31,代码来源:main.cpp
示例18: setMatrices
void setMatrices()
{
// Set up the projection and model-view matrices
GLfloat aspectRatio = (GLfloat)window.GetWidth()/window.GetHeight();
GLfloat nearClip = 0.1f;
GLfloat farClip = 500.0f;
GLfloat fieldOfView = 45.0f; // Degrees
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(fieldOfView, aspectRatio, nearClip, farClip);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
gluLookAt(0.0, 0.0, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f);
glPushMatrix(); // set the light in the scene correctly
transNode(cathedralScene, cathedralScene->mRootNode);
GLfloat light0_position[] = { 0, 30, 0, 0 };
glLightfv( GL_LIGHT0, GL_POSITION, light0_position );
GLfloat light1_position[] = { 0, 11, 0, 0.0 };
glLightfv( GL_LIGHT1, GL_POSITION, light1_position );
glPopMatrix();
glRotatef(rad_to_deg(pitch), 1.0, 0.0, 0.0);
glRotatef(rad_to_deg(yaw), 0.0, 1.0, 0.0);
glTranslatef(position.x, position.y, position.z);
// We store the modelview matrix here, but it's actually the view matrix because we haven't done any model transforms yet
// static double viewMatrix[16];
GLfloat *viewMatrix = new GLfloat[16];
glGetFloatv(GL_MODELVIEW_MATRIX, viewMatrix);
GLint inverseViewMatrixUniform = glGetUniformLocation(envMapShader->programID(), "inverseViewMatrix");
glUniformMatrix4fv(inverseViewMatrixUniform, 1, true, viewMatrix);
delete [] viewMatrix;
}
开发者ID:mrotondo,项目名称:ccrma,代码行数:35,代码来源:Main.cpp
示例19: main
int main(int argc, char** argv) {
// Put your game loop here (i.e., render with OpenGL, update animation)
while (window.IsOpened()) {
window.Display();
}
return 0;
}
开发者ID:sylvon,项目名称:AMazing,代码行数:8,代码来源:Main.cpp
示例20: init
void init(int argc, const char **argv)
{
assert(glewInit() == GLEW_OK);
assert(GLEW_VERSION_2_0 || GL_EXT_framebuffer_object);
glClearDepth(1.0f);
glClearColor(0.15f, 0.15f, 0.15f, 1.0f);
glEnable(GL_DEPTH_TEST);
glViewport(0, 0, window.GetWidth(), window.GetHeight());
}
开发者ID:mwlow,项目名称:flying,代码行数:9,代码来源:main.cpp
注:本文中的sf::Window类示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论