Random XNA游戏编程:在一个圆圈中繁殖敌人(代码)
有人能给我一些关于如何在一个圆圈中繁殖敌人的指导吗(XNA编程) 我希望敌人沿着窗口边界外的圆周随机繁殖。我希望它们沿着直线穿过窗户的中心,然后向外移动到它们开始的另一侧(或者尽可能靠近) 理想情况下,这将创造一个环境,让敌人从各个方向随机出现 到目前为止,这是我的敌人(“坏人”)班。我在游戏状态下处理的位置。我现在所做的并没有真正起作用,所以任何帮助都将不胜感激Random XNA游戏编程:在一个圆圈中繁殖敌人(代码),random,xna,geometry,spawning,Random,Xna,Geometry,Spawning,有人能给我一些关于如何在一个圆圈中繁殖敌人的指导吗(XNA编程) 我希望敌人沿着窗口边界外的圆周随机繁殖。我希望它们沿着直线穿过窗户的中心,然后向外移动到它们开始的另一侧(或者尽可能靠近) 理想情况下,这将创造一个环境,让敌人从各个方向随机出现 到目前为止,这是我的敌人(“坏人”)班。我在游戏状态下处理的位置。我现在所做的并没有真正起作用,所以任何帮助都将不胜感激 public class Baddies : Sprite { public enum State {
public class Baddies : Sprite
{
public enum State
{
Inactive,
SetupTraveling,
Traveling,
SetupInactive,
}
public State CurrentState
{
set
{
currentState = value;
framesInStateCount = 0;
}
get
{
return currentState;
}
}
int framesInStateCount = 0;
State currentState = State.SetupInactive;
public Baddies()
{
Image = getImage("Bad");
Scale = .2f;
Rotation = 0f;
DRotation = .05f;
TurnedOn = true;
BounceOn = false;
WrapOn = false;
Gravity = 0f;
}
public override void Update()
{
framesInStateCount++;
switch (currentState)
{
case State.Inactive:
if (RandOneIn(100)) CurrentState = State.SetupTraveling;
break;
case State.SetupTraveling:
PositionX = ((Game1.vGameWidth + 100)/2) * (float)Math.Cos(Glob.rnd(0.0, 2.0 * Math.PI));
PositionY = ((Game1.vGameHeight + 100)/2) * (float)Math.Sin(Glob.rnd(0.0, 2.0 * Math.PI));
DDPositionY = 0;
DPositionY = -1;
DPositionX = 1f;
DDPositionX = 0f;
CurrentState = State.Traveling;
break;
case State.Traveling:
if (PositionX > Game1.vGameWidth + (Image.Width / 2) * Scale)
{
currentState = State.SetupInactive;
}
if (PositionX < -500f - (Image.Width / 2) * Scale)
{
currentState = State.SetupInactive;
}
if (PositionY > Game1.vGameHeight + (Image.Height / 2) * Scale)
{
currentState = State.SetupInactive;
}
if (PositionY < 0 - (Image.Height / 2) * Scale)
{
currentState = State.SetupInactive;
}
break;
case State.SetupInactive:
PositionX = -300f;
DPositionX = 0f;
DPositionY = 0f;
DDPositionX = 0f;
CurrentState = State.Inactive;
break;
}
base.Update();
}
}
public class坏人:精灵
{
公共枚举状态
{
不活跃的
旅行,,
旅游,
设置为非活动,
}
公共状态当前状态
{
设置
{
当前状态=值;
framesInStateCount=0;
}
收到
{
返回电流状态;
}
}
int framesInStateCount=0;
State currentState=State.SetupInactive;
公众坏人()
{
Image=getImage(“坏”);
比例=.2f;
旋转=0f;
DRotation=.05f;
TurnedOn=正确;
BounceOn=false;
WrapOn=false;
重力=0f;
}
公共覆盖无效更新()
{
framesInStateCount++;
开关(当前状态)
{
案例状态。非活动:
如果(RandOneIn(100))CurrentState=State.SetupTraveling;
打破
案例状态.SetupTraveling:
PositionX=((Game1.vGameWidth+100)/2)*(float)Math.Cos(Glob.rnd(0.0,2.0*Math.PI));
PositionY=((Game1.vGameHeight+100)/2)*(float)Math.Sin(Glob.rnd(0.0,2.0*Math.PI));
ddy=0;
DPositionY=-1;
DPositionX=1f;
ddx=0f;
CurrentState=State.Traveling;
打破
案件状态:旅行:
如果(位置x>Game1.vGameWidth+(Image.Width/2)*比例)
{
currentState=State.SetupInactive;
}
如果(位置X<-500f-(图像宽度/2)*比例)
{
currentState=State.SetupInactive;
}
如果(位置Y>Game1.vGameHeight+(Image.Height/2)*比例)
{
currentState=State.SetupInactive;
}
如果(位置Y<0-(图像高度/2)*比例)
{
currentState=State.SetupInactive;
}
打破
case State.SetupInactive:
位置X=-300f;
DPositionX=0f;
DPositionY=0f;
ddx=0f;
CurrentState=State.Inactive;
打破
}
base.Update();
}
}
这个怎么样:
其他三角法:
raqdius = sqrt(Viewport.Size.Width^2 + Viewport.Size.Height^2) / 2;
angle = (float) Random.NextDouble() * MathHelper.PI * 2;
x = ViewPort.Center.X + radius * Math.Cos(angle);
y = ViewPort.Center.Y + radius * Math.Sin(angle);
三角法的其他方法:
raqdius = sqrt(Viewport.Size.Width^2 + Viewport.Size.Height^2) / 2;
angle = (float) Random.NextDouble() * MathHelper.PI * 2;
x = ViewPort.Center.X + radius * Math.Cos(angle);
y = ViewPort.Center.Y + radius * Math.Sin(angle);
我认为这是一个比我的更好的方法谢谢。我该如何让每个精灵朝着圆的中心移动,而不管它是在哪里诞生的?(速度在我的程序中由dppositiony和dppositionx变量处理)。方向向量是(目标-源),目标似乎是视口。在本例中居中,然后将其规格化,并将其乘以标量速度因子。谢谢。我试过了,但我得到了一个奇怪的错误:我认为这是一个比我的更好的方法谢谢。我该如何让每个精灵朝着圆的中心移动,而不管它是在哪里诞生的?(速度在我的程序中由dppositiony和dppositionx变量处理)。方向向量是(目标-源),目标似乎是视口。在本例中居中,然后将其规格化,并将其乘以标量速度因子。谢谢。我试过了,但发现一个奇怪的错误: