Box2d 物理引擎
1.cocos2d 自带了两套物理引擎:Box2D 和Chipmunk。 两套引擎都是为2D游戏设计的,可以和cocos2d 完美整合。 Box2D 是用 C写的,而 Chipmunk 用的是 C。 Box2D中的变量和方法名都是用全称命名的,Chipmunk中很多地方用的是只有一个字母的简写。有一些功能只
1.cocos2d 自带了两套物理引擎:Box2D 和Chipmunk。两套引擎都是为2D游戏设计的,可以和cocos2d 完美整合。
Box2D 是用 C++写的,而 Chipmunk 用的是 C。
Box2D中的变量和方法名都是用全称命名的,Chipmunk中很多地方用的是只有一个字母的简写。有一些功能只有Box2D提供,Chipmunk是没有的。比如,Box2D有针对快速移动
物体(例如子弹)直接穿透物体而不进行碰撞测试的解决方法。 ...
2.刚体:
物理物体叫做“刚体”(Rigid Bodies),这是因为物理引擎在驱动这些物体生成动画时,把它们当作硬的,不会变形的物体。将物体这样简化以后,物理引擎就可以同时计算大量的刚体了。
物理引擎中存在两种刚体:动态移动的(dynamic )和静态的(static)刚体。
静态刚体不会移动,也不应该移动- 因为物理引擎可以依赖静态刚体不会互相碰撞这个特性来做出一些优化。静态刚体的密度可以被设为0.
动态刚体,它们会相互碰撞,而且也会和静态刚体碰撞。动态刚体除了拥有位置
(position)和旋转(rotation )参数,还有至少3个用于定义动态刚体的参数。
它们分别是:密度或者质量(density or mass)- 用于衡量刚体有多重。另一
个是摩擦力(friction )- 用于表示刚体在平面上移动时遇到阻力的大小或者有多
滑。最后是复原(restitution )- 用于定义刚体的弹性。
3.碰撞
现实世界里的物体在运动时都会丢失能量,但是你可以在物理引擎中生成移动碰撞后不会丢失任何能量的动态刚体,甚至让刚体在与别的刚体发生碰撞弹回来以后,以更快的速度进行移动。
动态和静态刚体外面都有一个或者多个形体。这个形体用于判断刚体之间的碰撞的。每一次碰撞会生成一些碰撞点(contact points ) - 两个相碰撞刚体之间的交叉点。这些碰撞点可被用于播放粒子效果或者在刚体的碰撞处动态地添加刮痕。
物理引擎通过使用力量,脉冲和扭矩生成动态刚体的动画。不能直接设置刚体的位置和旋转。如果手动修改物体位置信息,物理引擎先前所作的某些假设就会失效。
4.关节
可以使用关节(joints )把多个刚体连接起来,这样可以用不同的方式限制相互连接着的刚体的活动。某些关节可能配备有马达,比如它们可被用于驱动汽车的轮子或者给关节产生摩擦力,这样关节在向某个方向移动以后,会试着回到原来的位置。
关节通过使用b2World类的CreateJoint方法来生成。使用刚体的 GetWorld 方法就可以得到b2World。
// 生成旋转关节
b2RevoluteJointDef jointDef;
jointDef.Initialize(bodyA, bodyB, bodyB->GetWorldCenter());
bodyA->GetWorld()->CreateJoint(&jointDef);
柱状关节:只允许朝一个方向移动,单筒望远镜是一个应用柱状关节的很好的例子。
b2PrismaticJointDef jointDef;
b2Vec2 worldAxis(0.0f, 1.0f);
jointDef.Initialize(bodyA, bodyB, body->GetWorldCenter(), w orldAxis);
jointDef.lowerTranslation = 0.0f;
jointDef.upperTranslation = 0.75f;
jointDef.enableLimit = true;
jointDef.maxMoto rForce = 60.0f;
jointDef.motorSpeed = 20.0f;
jointDef.enableMotor = false;
joint = (b2PrismaticJoint*)body- >GetWorld()->CreateJoint(&jointDef);
把活塞的摩擦力和密度设置为极限值,这样弹球就不会在碰到活塞的时候弹跳出去了,这可以保证平滑的发射动作。
fixtureDef.friction = 0.99f;
fixtureDef.restitution = 0.01f;
5.物理引擎的局限性
真实世界过于复杂,完全放到物理引擎中进行模拟是不可能的。这就是为什么要使用刚体的原因。
在某些极端情况下,物理引擎有可能会捕捉不到某些已经发生的碰撞 – 例如,当刚体以很快的速度移动时,一个刚体可能直接穿透另一个刚体。虽然在量子物理学中这样的穿透情况会发生。
刚体有时候会相互穿透卡在一起,特别是在使用了关节将它们连接在一起以后。卡在一起的刚体会努力要分开,但是为了满足关节的连接要求,它们又不得不卡在一起,结果是卡在一起的刚体会产生颤动。
我们也可能碰到游戏运行的问题。如果我们在游戏里使用了很多刚体,你永远不会知道这些刚体相互作用后的最终结果。最终,有些玩家会把自己卡死在刚体中,或者他们也可能会发现如何利用物理模拟的漏洞,跑到游戏中他们本来不应该去的区域。
6.Box2D
因为Box2D使用C++写的,所以必须使用.mm作为所有项目的实现文件的后缀名,而不是通常的.m后缀名。.mm后缀用于告知Xcode把有此后缀名的文件作为Objective-C++或者C++代码来处理。如果你使用了.m后缀,Xcode就会把代码以Objective-C和C来处理,Xcode就不能正确处理Box2D的C++代码了。因此,如果碰到很多编译错误,首先检查一下是不是所有的实现文件都是以.mm作为后缀的。
Box2D手册:http://www.box2d.org/manual.html
Box2D的API参考下载:http://code.google.com/p/box2d
7.b2World
b2World初始化时使用了一个初始的重力矢量值和用于决定是否允许动态刚体“睡眠”的标记变量。
例:对Box2D世界进行初始化
b2Vec2 gravity = b2Vec2(0.0f, -10.0f);
bool allowBodiesToSleep = true;
world = new b2World(gravity, allowBodiesToSleep);
会“睡眠”的动态刚体:当施加到某个刚体上的力量小于临界值一段时间以后,这个刚体将会进入“睡眠”状态。换句话说,如果某个刚体移动或者旋转的很慢或者根本不在动的话,物理引擎将会把它标记为“睡眠”状态,不再对其施加力量,直到新的力量施加到刚体
上让其再次移动或者旋转。通过把一些刚体标记为“睡眠”状态,物理引擎可
以省下很多时间。除非你游戏中的所有动态刚体处于持续的运动中,否则应该把
allowBodiesToSleep变量设置为true。
传入Box2D世界的重力是一个b2Vec2的struct类型。它和CGPoint在本质上是
一样的,都储存着x 轴和y 轴的浮点值。和真实世界一样重力都是一个常量(0,-10)。
8.刚体b2Body
把活动范围限制在屏幕之内:
创建一个静态刚体:
b2BodyDef containerBodyDef;
b2Body* containerBody = world->CreateBody(&containerBodyDef);
刚体通常都是使用world的CreateBody方法来生成的,可以确保正确地分配和释放刚体所占用的内存。默认情况下,一个空的刚体定义会生成一个位于(0,0)位置的静态刚体。
填充4条边,以构成空心刚体,屏幕的四个边需要单独创建,以便只有四个边是实心的,中间则是空心的,用于放入其它刚体:
b2PolygonShape screenBoxShape;
int density = 0;
// 底部
screenBoxShape.SetAsEdge(lowerLeftCorner, lowerRightCorner);
containerBody->CreateFixture(&screenBoxShape, density);
// 顶部
screenBoxShape.SetAsEdge(upperLe ftCorner, upperRightCorner);
containerBody->CreateFixture(&screenBoxShape, density);
// 左边
screenBoxShape.SetAsEdge(upperLeftCorner, lowerLeftCorner);
containerBody->CreateFixture(&screenBoxShape, density);
// 右边
screenBoxShape.SetAsEdge(upperRi ghtCorner, lowerRightCorner);
containerBody->CreateFixture(&screenBoxShape, density);
b2PolygonShape类还有SetAsBox方法,调用它会生成的是一个实心的刚体。
使用SetAsBox方法生成的盒子是其接受的参数大小的两倍,所以提供给这个方法的
参数坐标值要除以2,或者乘以0.5f。
9.单位:Box2D中距离以米为单位,质量以公斤为单位,时间以秒为单位。
Box2D在0.1米到10米的范围内工作是最优化的,因为它针对这个范围做过专门优化,把创建的Box2D世界中的刚体的大小限定在越接近1米越好,太小或者太大的刚体很可能会在游戏运行过程中产生错误和奇怪的行为。
PTM_RATIO的定义如下: #define PTM_RATIO 32
PTM_RATIO用于定义32个像素在Box2D世界中等同于1米。一个有32像素宽和高的
盒子形状的刚体等同于1米宽和高的物体。2x32像素大小的瓷砖的尺寸刚好是1x1米,大小4x4像素的大小是0.125米x0.125米。
Box2d在处理大小在0.1到10个单元的对象的时候做了一些优化。这里的0.1米大概就是一个杯子那么大,10的话,大概就是一个箱子的大小。
屏幕的宽度和高度值除以一个名为 PTM_RATIO的常量,把像素值转换成了以米为单位来
计算长度:
CGSize screenSize = [CCDirector sharedDirector].winSize;
float widthInMeters = screenSize.width / PTM_RATIO;
float heightInMeters = screenSize.height / PTM_RATIO;
//四个角的坐标, 以米为单位:
b2Vec2 lowerLeftCorner = b2Vec2(0, 0);
b2Vec2 lowerRightCorner = b2Vec2(widthInMeters, 0);
b2Vec2 upperLeftCorner = b2Vec2(0, heightInMeters);
b2Vec2 upperRightCorner = b2Vec2(widthInMeters, heightInMeters) ;
在b2Vec2和CGPoint之间转换:
-(b2Vec2) toMeters:(CGPoint)point
{
return b2Vec2(point.x / PTM_R ATIO, point.y / PTM_RATIO);
}
-(CGPoint) toPixels:(b2Vec2)vec
{
return ccpMult(CGPointMake (vec.x, vec.y), PTM_RATIO);
}
10.生成一个由精灵作为表现的动态刚体示例:
-(void) addNewSpriteAt:(CGPoint)pos
{
CCSpriteBatchNode* batch = (CCSpriteBatchNode*)[self getChildByTag:kTagBatchNode];
int idx = CCRANDOM_0_1() * TILESET_COLUMNS;
int idy = CCRANDOM_0_1 () * TILESET_ROWS;
CGRect tileRect = CGRectMake(TILESIZE * idx, TILESIZE * idy, TILESIZE, TILESIZE);
CCSprite* sprite = [CCSprite sp riteWithBatchNod e:batch rect:tileRect];
sprite.position = pos;
[batch addChild:sprite];
//创建一个刚体的定义,并将其设置为动态刚体
b2BodyDef bodyDef;
bodyDef.type = b2_dynamicBody;
bodyDef.position = [self toMeters:pos];
bodyDef.userData = sprite;
b2Body* body = world->CreateBody(&bodyDef);
// 定义一个盒子形状,并将其复制给body fixture
b2PolygonShape dynamicBox;
float tileInMeters = TILESIZE / PTM_RATIO;
dynamicBox.SetAsBox(tileInMeters * 0.5f, tileInMe ters * 0.5f);
b2FixtureDef fixtureDef;
fixtureDef.shape = &dynamicBox;
fixtureDef.density = 0.3f;
fixtureDef.friction = 0.5f;
fixtureDef.restitution = 0.6f;
body->CreateFixture(&fixtureDef);
}
世界创建刚体,刚体再创建它的附着物。刚体和精灵没有直接关系,它们只是位置被维持相同罢了。
可以把b2FixtureDef 理解成包含着刚体需要用到的所有数据的容器。这些数据包括:刚体的形状(最重要的一项),密度,摩擦力和复原(这项会影响刚体在world中移动和弹跳的方式)。
11.box2d的动画
刚体看不见但摸的着,精灵看的见但摸不着。在update方法中遍历每个刚体,把刚体的userData返回,并且转换成CCSprite指针。把刚体的位置信息转换成像素值,赋值给精灵的位置属性,让精灵可以随着刚体一起移动。同样地,设置精灵的角度值。
Box2D的world是通过定期地调用Step方法来实现动画的。
Step方法需要三个参数。
第一个是timeStep,它会告诉Box2D自从上次更新以后已经过去多长时间了,直接影响着刚体会在这一步移动多长距离。不建议使用delta time来作为timeStep的值,因为delta time会上下浮动,刚体就不能以相同的速度移动了。
第二和第三个参数是迭代次数。它们被用于决定物理模拟的精确程度,也决定着计算刚体移动所需要的时间。
示例:更新每个刚体相关联的精灵的位置和旋转信息
-(void) update:(ccTime)delta
{
//使用固定的时间间隔将物理模拟向前推进一步
float timeStep = 0.03f;
int32 velocityIterations = 8;
int32 positionIterations = 1;
world->Step(timeStep, velocityIterati ons, positionIterations);
for (b2Body* body = world->GetBodyList(); body != nil; body = body->GetNext())
{
CCSprite* sprite = (CCSprite*)body->GetUserData();
if (sprite!= NULL)
{
sprite.position = [self toPixels:body->GetPosition()];
float angle = body ->GetAngle();
sprite.rotation = CC_RADIAN S_TO_DEGREES(angle) * -1;
}
}
}
12.碰撞测试
创建一个继承自b2ContactListener的新类,重写BeginContact和EndContact这两个方法,任何时候两个刚体发生碰撞时都会调用这两个方法。
将它的实例设为world的contact listener:
contactListener = new ContactListener();
world->SetContactListener(contactListener);
在b2ContactListener实例的回调中不能进行任何更改游戏物理世界的操作,所以我们可以保存两个碰撞物体的引用,然后待会在update中做其它处理。
13.
凸面体的特点是:在凸面体里面找任意两个点,这两个点连成的线的任何部分都不会落在凸面体外面。
凹面体(Concave)里任意两个点连成的线可能有一部分会落在外面。
组成多边形的顶点在定义是要以反时针方向来进行。
使用VertexHelper工具,通过把顶点一个接一个画出来的方式来 生成碰撞测试用的多边形。
VertexHelper的源代码是通过GitHub来共享的: http://github.com/jfahrenkrug/VertexHelper.,下载下来是一个xcode mac工程,
VertexHelper只是一个帮助寻找凸面体顶点数组的工具,我们需要的是它生成的多边形顶点数组,对于一个物体,可以把它当作一个凸面体,而对于一个地图,要在其中找到多个凸面体,在VertexHelper中生成的顶点数组代码,可以一段一段的拷贝,当作多个多边形,只要认为某一段的顶点若连起来后是凸面体就好了。
顶点的位置是相对于body中心的,最大顶点数量不能超过8,数量越大,越费内存,性能也越差。
14.步骤
加载场景,场景中有一个CCLayer
在CCLayer中初始化世界:设置边界,设置监听
启用渲染调试
加载纹理贴图,*.plist
在CCLayer中加载背景颜色层 CCLayerColor
在CCLayer中添加精灵批处理,CCSpriteBatchNode,(可以在每个CCNode中添加同一个纹理贴图生成的精灵批处理,以方便此node中快速生成sprite)
添加静态元素层CCNode,此node中可以添加一些CCSprite。
使用world创建刚体,然后创建和刚体对应的sprite添加到精灵批处理,并关联给刚体的userdata,此处代码也可以封装一下。
在预约的update回调方法中,遍历世界中的所有刚体,把精灵的位置和刚体的位置及角度同步。
示例中的BodyNode被添加到了TableSetup中,只是起到了保存实例引用的作用。
15.形状
b2CircleShape shape;
float radiusInMeters = (tempSprite.contentS ize.width / PTM_RATI O) * 0.5f;
shape.m_radius = radiusInMeters;
将b2BodyDef的angularDamping的域设为0.9f,它会让球对转弯的动作产生更大的阻力。这样弹球在滑过弹球桌面的时候不会产生很多的自身旋转,这对于用金属制作的有一定重量的弹球来说是标准的移动方式。
16.variable length array of non-POD element type 'b2Vec2'
问题分析:错误指向的是cocos2d里一个结构体数组定义,如下:
b2Vec2 vertices[vertexCount];
问题解决:把其改成指针形式,如下:
b2Vec2 *vertices = new b2Vec2[vertexCount];
搞定。
17.添加box2d
将libs/box2d目录拷贝到工程中;
User Header Search Paths "KnowledgeGame/Classes/libs" non
Always search user paths YES
所有与box2d扯上关系的源文件修改为.mm
18.Box2D具体是如何运作的。
创建了world对象,接下来需要往里面加入一些body对象。body对象可以随意移动,可以是怪物或者飞镖什么的,只要是参与碰撞的游戏对象都要为之创建一个相应的body对象。当然,也可以创建一些静态的body对象,用来表示游戏中的台阶或者墙壁等不可以移动的物体。
为了创建一个body对象,首先,创建一个body定义结构,然后是body对象,再指定一个shap,再是fixture定义,然后再创建一个fixture对象。下面详细介绍这个过程:
首先创建一个body定义结构体,用以指定body的初始属性,比如位置或者速度。
然后调用world对象来创建一个body对象。
然后为body对象定义一个shape,用以指定想要仿真的物体的几何形状。
接着创建一个fixture定义,同时设置之前创建好的shape为fixture的一个属性,并且设置其它的属性,比如质量或者摩擦力。
最后,可以使用body对象来创建fixture对象,通过传入一个fixture的定义结构就可以了。
请注意,可以往单个body对象里面添加很多个fixture对象。这个功能在创建特别复杂的对象的时候非常有用。比如自行车,可能要创建2个轮子,车身等等,这些fixture可以用关节连接起来。
只要把所有需要创建的body对象都创建好之后,box2d接下来就会接管工作,并且高效地进行物理仿真—只要你周期性地调用world对象的step函数就可以了。
但是,请注意,box2d仅仅是更新它内部模型对象的位置–如果想让cocos2d里面的sprite的位置也更新,并且和物理仿真中的位置相同的话,那么你也需要周期性地更新精灵的位置。
19.density,friction和restitution参数的意义。
Density 就是单位体积的质量(密度)。因此,一个对象的密度越大,那么它就有更多的质量,当然就会越难以移动.
Friction 就是摩擦力。它的范围是0-1.0, 0意味着没有摩擦,1代表最大摩擦,几乎移不动的摩擦。
Restitution 回复力。它的范围也是0到1.0. 0意味着对象碰撞之后不会反弹,1意味着是完全弹性碰撞,会以同样的速度反弹。
20.Box2d用户手册
http://www.box2d.org/manual.html
http://wwk.iteye.com/blog/1722124

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











가상 머신(VM)을 물리적 머신으로 변환하는 것은 가상 인스턴스 및 관련 애플리케이션 소프트웨어를 물리적 하드웨어 플랫폼으로 마이그레이션하는 프로세스입니다. 이러한 변환은 운영 체제 성능과 하드웨어 리소스 활용도를 최적화하는 데 도움이 됩니다. 이 문서에서는 이러한 변환을 수행하는 방법을 자세히 살펴보는 것을 목표로 합니다. 가상 머신에서 물리적 머신으로의 마이그레이션을 어떻게 구현하나요? 일반적으로 가상 머신과 물리적 머신 간의 변환 프로세스는 타사 소프트웨어에 의해 가상 머신 외부에서 수행됩니다. 이 프로세스는 가상 머신 구성 및 리소스 전송과 관련된 여러 단계로 구성됩니다. 실제 머신 준비: 첫 번째 단계는 실제 머신이 Windows의 하드웨어 요구 사항을 충족하는지 확인하는 것입니다. 변환 프로세스가 기존 데이터를 덮어쓰게 되므로 실제 머신에 데이터를 백업해야 합니다. *시스템 이미지를 생성할 수 있는 관리자 권한이 있는 관리자 계정의 사용자 이름 및 비밀번호입니다. 가상일 것이다

많은 친구들은 Windows에 자체 파일 파쇄 기능이 있다는 것을 알고 있습니다. 새로운 Windows 10에는 자체 파일 파쇄 기능이 있습니다. 사용자는 이 기능을 사용하여 정크 파일을 빠르게 제거할 수 있습니다. 그러나 방금 Windows 10 시스템으로 업그레이드한 많은 초보자는 Windows 10 파일을 파쇄하는 방법을 모릅니다. 다음으로 Windows 10 파일을 파쇄하는 방법을 알려드리겠습니다. Windows 10에서 파일을 파쇄하는 방법: 1. 먼저 데스크톱 검색 상자에 cmd를 입력하고 명령 프롬프트를 입력한 후 마우스 오른쪽 버튼을 클릭하고 관리자 권한으로 실행을 선택합니다. 2. 열린 관리자 명령 프롬프트에 cipher/w:C 명령을 입력합니다. Enter 키를 누릅니다. 3. 마지막 문자 C 드라이브에서 수정하고 다음과 같이 인내심을 갖고 기다립니다. 참고: 번호를 지우려면

많은 사용자가 win11 시스템과 함께 제공되는 바이러스 백신 소프트웨어를 켜거나 끄고 싶어하지만 실제로는 시스템 설정에 들어가서 개인정보 보호 및 보안 옵션에서 찾기만 하면 됩니다. 편집자의 지시를 따르자. win11과 함께 제공되는 바이러스 백신 소프트웨어가 어디에 있는지 살펴보겠습니다. win11과 함께 제공되는 바이러스 백신 소프트웨어는 어디에 있습니까? 1. 먼저 바탕 화면 왼쪽 하단에 있는 작업 표시줄에서 시작 메뉴 옵션을 클릭합니다. 2. 그런 다음 페이지 상단의 "설정" 인터페이스를 찾아서 입력하세요. 3. 그런 다음 왼쪽 하단의 '개인정보 및 보안' 탭을 클릭하세요. 4. 그런 다음 오른쪽에 있는 "Windows 보안 센터" 옵션을 찾아서 입력하세요. 5. "Windows 보안 센터 열기" 옵션을 입력하고 선택하려면 클릭하세요. 여기 win11이 있습니다.

일부 물리학자들은 인간이 실제로 매트릭스 공간에 살고 있음을 확인했습니다! ? 이렇게 신비해 보이는 결론이 과학으로 확인될 수 있습니까? 포츠머스 대학 물리학과 부교수이자 정보 이론 전문가인 멜빈 밥슨(Melvin Vopson)은 새로운 논문에서 인간이 시뮬레이션된 세계에 살고 있다는 가설이 정보의 기본 법칙에 존재할 수 있다고 제안했습니다. 예를 들어, 이러한 법칙은 인간의 DNA 유전 정보나 컴퓨터에 저장된 디지털 정보에 숨겨져 있을 수 있습니다. 역학 제2법칙과 그의 결과는 시간이 지남에 따라

Windows 11과 함께 제공되는 가상 머신을 사용하는 방법은 무엇입니까? 많은 친구들이 Windows 11과 함께 제공되는 가상 머신을 사용하는 방법을 모릅니다. 실제로 단계는 매우 간단합니다. 사용법을 모르신다면 편집자가 win11 가상머신 사용법을 아래에 정리했습니다. 관심이 있으시면 편집자를 따라 아래를 살펴보세요! win11 가상 머신 사용 방법 1. win111 Professional 버전 먼저 시작 메뉴를 통해 "설정"으로 들어갑니다. 2. 설정 왼쪽의 "적용" 옵션을 클릭하세요. 3. 그런 다음 "선택적 기능"을 엽니다. 4. 하단 관련 설정에서 "추가 Windows 기능"을 활성화하세요. 5. "Hyper-V" 활성화를 선택하고 확인을 클릭하여 저장합니다. 2. 홈 버전 win111

많은 사용자는 Win11 시스템에 숨겨진 이 비밀 무기인 내장된 압축 해제 도구에 대해 아직 알지 못할 수도 있습니다! 여기서는 더 이상 다양한 압축 파일을 처리하기 위해 복잡한 타사 압축 해제 소프트웨어를 검색하고 다운로드할 필요가 없습니다. 대신 마우스 오른쪽 버튼만 클릭하면 모든 것이 해결됩니다. win11과 함께 제공되는 압축 해제 도구는 어디에 있습니까? 추신: win11과 함께 제공되는 압축 해제 도구는 rar 및 zip 형식만 지원하며 다른 형식은 압축을 풀 수 없습니다. 1. 먼저, 압축이 풀린 압축파일을 마우스 오른쪽 버튼으로 선택하세요. 2. 아래 그림과 같이 마우스 오른쪽 버튼 클릭 메뉴에서 슬라이드하여 "모두 추출"을 찾습니다. 3. 그런 다음 현재 페이지에서 찾아보기를 클릭하여 압축을 풀 위치를 선택할 수 있습니다. 4. 마지막으로 설정이 완료되면 아래의 "확인"을 클릭하여 압축을 풀어주세요.

8일 뉴스에 따르면 미국 자동차 시장은 그동안 사랑받았던 6기통과 8기통 동력엔진이 점차 그 위세를 잃어가는 가운데 3기통 엔진이 등장하고 있다. 10월 8일자 뉴스에서는 미국 자동차 시장이 내부적으로 변화를 겪고 있다는 소식을 전했습니다. 과거에 사랑받았던 6기통과 8기통 동력엔진은 점차 그 지배력을 잃어가고 있으며, 대부분의 사람들의 마음 속에는 미국인들이 대용량 배기량 모델과 '미국의 대형 V8'을 좋아하기 시작하고 있습니다. 항상 미국 자동차와 동의어였습니다. 그러나 최근 외신이 공개한 자료에 따르면 미국 자동차 시장의 지형은 엄청난 변화를 겪고 있으며 내부 경쟁도 치열해지고 있다. 2019년 이전에는 미국이

클라우드 서버의 vCPU는 물리적 서버의 CPU에서 실행을 시뮬레이션하는 프로세서입니다. 물리적 서버는 일반적으로 여러 vCPU 인스턴스를 지원할 수 있으며 각 인스턴스는 독립적으로 실행됩니다. 이러한 vCPU의 수는 물리적 서버의 구성과 클라우드 서비스 제공업체의 정책에 따라 다릅니다. vCPU와 물리적 CPU 간의 관계는 시분할 다중화 기술을 통해 달성됩니다. 즉, 물리적 CPU의 시간을 여러 시간 세그먼트로 나누고 각 세그먼트가 가상 머신 인스턴스의 vCPU에 할당된다는 의미입니다. 따라서 가상 머신 인스턴스의 vCPU는 전체 물리적 CPU가 아닌 할당된 시간 조각만 사용할 수 있습니다. vCPU의 성능은 기본 물리적 CPU에 의해 제한됩니다. 예를 들어 CPU 코어 4개와 스레드 8개를 갖춘 물리적 서버가 가장 적합합니다.
